我正在为应用程序创建一个地图,我需要以两种不同的方式呈现。一张迷你地图和一张普通地图,它们都由一个UserControl
组成。我的问题是,我试图找到一种平滑的方式来显示带有区域名称的常规大小的地图,以及没有显示的迷你地图。我一直在研究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中使用了所有带有正确标签的TextBlocks,并且当前正在尝试删除Text属性,如果MiniMap属性设置为true,并且如果它为false则让它们成为。目前我只是在地图的标题上这样做,但是一旦我让这个工作起来,我就可以遍历它们。
if (MiniMap == true)
{
this.Title.Text = "";
}
然后我在另一个View中将此UserControl实例化两次,其中MiniMap属性在一种情况下设置为true,在另一种情况下设置为false。
<map:myMap x:Name="myMap" Visibility="Collapsed" MiniMap="False"/>
<map:myMap x:Name="miniMap" Visibility="Visible" MiniMap="True"/>
这里的想法是,一旦你点击Map按钮,就会出现大地图(将Visibility
更改为Visible
),并且由于此实例中MiniMap属性设置为false,因此TextBlock( s)应该是空的,或者最好是删除 - 但这是一个不同的问题。我的问题在于,无论我做什么,我的UserControl
的两个实例似乎总是具有MiniMap
属性的相同值,所以我只能在两种情况下都打开TextBlock,或者在两个。任何人都知道如何让这个工作,或者有另一个更适合我的问题的解决方案?
答案 0 :(得分:2)
尝试使用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 = "";
}