WPF中同一用户控件的不同实例中的不同值
Different values in different instances of the same usercontrol in WPF
我正在为应用程序创建地图,我需要以两种不同的方式呈现它。一张mini-map和一张正则图,都是一张UserControl
。我的问题是,我正在尝试找到一种平滑的方式来显示带有区域名称的 regular-sized 地图,而没有显示 mini-map 地图。我一直在研究 DependencyProperties
作为一种可能的方法,或者至少是一种说明我的思路的方法。我目前所拥有的是这个。
public bool MiniMap
{
get { return (bool)GetValue(MiniMapProperty); }
set { SetValue(MiniMapProperty, value); }
}
public static DependencyProperty MiniMapProperty =
DependencyProperty.Register("MiniMap",
typeof(bool),
typeof(myMap),
new PropertyMetadata());
然后我在 UserControl 中拥有所有带有正确标签的 TextBlock,如果 MiniMap 属性 设置为 true,我目前正在尝试删除文本 属性,如果这是错误的。目前我只是在地图的标题上这样做,但是一旦我开始使用它,我就可以循环遍历它们。
if (MiniMap == true)
{
this.Title.Text = "";
}
然后我在不同的视图中实例化此 UserControl 两次,一次将 MiniMap 属性 设置为 true,另一次设置为 false。
<map:myMap x:Name="myMap" Visibility="Collapsed" MiniMap="False"/>
<map:myMap x:Name="miniMap" Visibility="Visible" MiniMap="True"/>
这里的想法是,一旦你点击地图按钮,就会出现大地图(将 Visibility
更改为 Visible
)并且由于 MiniMap 属性 设置为 false在这种情况下,那么 TextBlock(s) 应该为空,或者最好删除 - 但这是一个不同的问题。我的问题是,无论我做什么,我的 UserControl
的两个实例似乎总是对 MiniMap
属性 具有相同的值,所以我只能打开 TextBlock两种情况,或两者均关闭。任何人都知道我如何才能让它工作,或者有其他更适合我的问题的解决方案?
尝试使用 propertychanged 回调
public static DependencyProperty MiniMapProperty =
DependencyProperty.Register("MiniMap",
typeof(bool),
typeof(myMap),
new PropertyMetadata(new PropertyChangedCallback(OnMiniMapPropertyChanged)));
private static void OnMiniMapPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
var control = sender as myMap;
if (control != null && (bool)e.NewValue == true)
control.Title.Text = "";
}
我正在为应用程序创建地图,我需要以两种不同的方式呈现它。一张mini-map和一张正则图,都是一张UserControl
。我的问题是,我正在尝试找到一种平滑的方式来显示带有区域名称的 regular-sized 地图,而没有显示 mini-map 地图。我一直在研究 DependencyProperties
作为一种可能的方法,或者至少是一种说明我的思路的方法。我目前所拥有的是这个。
public bool MiniMap
{
get { return (bool)GetValue(MiniMapProperty); }
set { SetValue(MiniMapProperty, value); }
}
public static DependencyProperty MiniMapProperty =
DependencyProperty.Register("MiniMap",
typeof(bool),
typeof(myMap),
new PropertyMetadata());
然后我在 UserControl 中拥有所有带有正确标签的 TextBlock,如果 MiniMap 属性 设置为 true,我目前正在尝试删除文本 属性,如果这是错误的。目前我只是在地图的标题上这样做,但是一旦我开始使用它,我就可以循环遍历它们。
if (MiniMap == true)
{
this.Title.Text = "";
}
然后我在不同的视图中实例化此 UserControl 两次,一次将 MiniMap 属性 设置为 true,另一次设置为 false。
<map:myMap x:Name="myMap" Visibility="Collapsed" MiniMap="False"/>
<map:myMap x:Name="miniMap" Visibility="Visible" MiniMap="True"/>
这里的想法是,一旦你点击地图按钮,就会出现大地图(将 Visibility
更改为 Visible
)并且由于 MiniMap 属性 设置为 false在这种情况下,那么 TextBlock(s) 应该为空,或者最好删除 - 但这是一个不同的问题。我的问题是,无论我做什么,我的 UserControl
的两个实例似乎总是对 MiniMap
属性 具有相同的值,所以我只能打开 TextBlock两种情况,或两者均关闭。任何人都知道我如何才能让它工作,或者有其他更适合我的问题的解决方案?
尝试使用 propertychanged 回调
public static DependencyProperty MiniMapProperty =
DependencyProperty.Register("MiniMap",
typeof(bool),
typeof(myMap),
new PropertyMetadata(new PropertyChangedCallback(OnMiniMapPropertyChanged)));
private static void OnMiniMapPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
var control = sender as myMap;
if (control != null && (bool)e.NewValue == true)
control.Title.Text = "";
}