代码之家  ›  专栏  ›  技术社区  ›  Tom

WPF中相同usercontrol的不同实例中的不同值

  •  0
  • Tom  · 技术社区  · 7 年前

    我正在为一个应用程序创建一个映射,我需要用两种不同的方式来表示。一个迷你地图和一个常规地图,它们都由一个 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中拥有所有具有正确标签的TextBlock,并且当前正在尝试删除Text属性(如果MiniMap属性设置为true),如果为false,则顺其自然。目前我只是在地图的标题上做这件事,但一旦我把这件事做好,我就可以把它们全部循环一遍。

        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应该为空,或者最好删除,但这是另一个问题。我这里的问题是,无论我做什么,我的两个例子 用户控制 对于 MiniMap 属性,因此我只能在两种情况下都打开或关闭TextBlock。有谁知道我该如何让它工作,或者有其他更适合我的问题的解决方案吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Daniele Sartori    7 年前

    尝试使用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 = "";
            }