[编辑]所以我特意希望将预编译的usercontrol添加到我的xaml页面,抓取可视树,根据特定条件查找元素并在其周围绘制一个矩形。此问题涉及的问题部分是动态地将边框应用于现有的元素。
我已经在代码中工作(很糟糕),导航树很好,但在现有项目与其父项之间插入边框会导致混乱。它可能会改变Z顺序,改变现有子项的顺序,暂时闪烁,因为它暂时从树中移除,事件发生。
如果这是WPF,我可能会使用装饰,但我们在SL中没有装饰。
我正在尝试在我的可视树中选择一个元素,在这种情况下是按钮,如果选中则添加边框,如果不是,则删除边框。如果我可以为xaml添加边框并绑定它们的厚度或其他东西,那将是简单本身,但这不是一个选项。我特别想要“发现”元素并突出它们。
有人做到了吗?
答案 0 :(得分:1)
查看您的更新,您可以通过以下几种方式解决此问题。
一种方法是确保控件位于Grid
(如果它不添加网格),然后在其后面放置一个边框控件,让Grid
重叠两个元素。
<SomeContainingElement>
<Grid>
<Border></Border>
<TheButton></TheButton>
</Grid>
</SomeContainingElement>
如果您需要确保控件不与边框重叠,请为目标控件添加边距,以便边框显示在其后面。
<SomeContainingElement>
<Grid>
<Border BorderThickness="1"></Border>
<TheButton Margin="1"></TheButton>
</Grid>
</SomeContainingElement>
这样,您只需将边框的可见性设置为可见/折叠,而不会影响原始控件。您甚至可以将可见性绑定到控件上的属性。
如果要将此功能包含在UserControl
子类ContentControl
中,您可以轻松地将按钮添加为内容并绑定依赖项属性以控制边框外观:
<SomeContainingElement>
<YourBorderControl BorderVisibility="{Binding Selected, ElementName=childButton}" BorderThickess="1">
<TheButton x:Name="childButton" Margin="1"></TheButton>
</YourBorderControl>
</SomeContainingElement>
UC中的网格可以根据您在UC上设置的边框厚度对其子项应用填充,以确保子控件不会与可视树中位于其后面的边框重叠。
编辑:或者你可以把边框放在顶部..?!
至于发现 - 您可以在尝试使用突出显示功能之前遍历整个控制树并添加这些控件 - 节省您必须添加/删除任何内容
编辑:或者只是在发现时添加控件 - 这样你只需编写代码就可以在树中插入一个可视元素,UC将处理从那时起隐藏/显示边框
答案 1 :(得分:-1)
在“发现”其他内容之后,通常会“看到/崩溃”某些内容而不是添加/删除它。