【发布时间】:2017-11-17 09:31:11
【问题描述】:
我正在为一个应用程序创建一个地图,我需要以两种不同的方式呈现它。一张小地图和一张普通地图,都由一张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,如果 MiniMap 属性设置为 true,则当前尝试删除 Text 属性,如果设置为 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(s) 应该是空的,或者最好删除 - 但这是一个不同的问题。我的问题是,无论我做什么,我的UserControl 的两个实例似乎总是对MiniMap 属性具有相同的值,所以我只能在两种情况下都打开TextBlock,或者在两种情况下都关闭。任何人都知道我怎样才能让它工作,或者有其他更适合我的问题的解决方案吗?
【问题讨论】:
-
你是在声明这个用户控件的 2 个实例,还是在实例中处理两个地图的单个用户控件?
-
查看我对最后一个代码 sn-p 的编辑。我将相同的 UserControl 实例化了两次,但其中一个被缩小了一点(迷你地图)。我只需要他们弄清楚它们是迷你地图还是普通版。
-
我不知道这是否是您的问题格式,但是您的两个用户控件具有相同的名称。如果您按名称引用它们,这似乎是一个问题。
-
我猜这不是你真正的代码,因为你给你的两个控件赋予了相同的名字。
-
那只是我懒惰地复制粘贴上面的行对不起。它们在我的应用程序中有不同的名称。对不起。我已经从代码中删除了一些部分(缩放、边距和大小调整等)以保持代码整洁。
标签: c# wpf xaml user-controls dependency-properties