WPF

时间:2017-11-17 09:31:11

标签: c# wpf xaml user-controls dependency-properties

我正在为应用程序创建一个地图,我需要以两种不同的方式呈现。一张迷你地图和一张普通地图,它们都由一个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,或者在两个。任何人都知道如何让这个工作,或者有另一个更适合我的问题的解决方案?

1 个答案:

答案 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 = "";
        }
相关问题