我已经按照Codeproject上的DiagramDesigner示例学习如何在WPF中使用Adorners,因为它相当紧密地满足了我的一些需求。
我稍微调整了实现,并添加了我自己的装饰器,用于通过滑块(装饰器上的滑块)控制控件的不透明度。
按照与作者相同的方法,我将滑块和其他功能放在xaml样式定义文件中,如下所示。我现在正在努力A)弄清楚如何在任何级别访问滑块,B)如何最好地开始使用将用于各种设置的基础Viewmodel(在装饰器上)。
<Style x:Key="OpacityAdorner" TargetType="{x:Type adorners:OpacityChrome}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type adorners:OpacityChrome}">
<Grid>
<Slider x:Name="OpacitySlider" Style="{StaticResource OpacityControl}" ToolTip="Alter the opacity of the image to overlay with other images" Visibility="Collapsed"/>
<Ellipse x:Name="OpacitySliderEnable" Style="{StaticResource OpacityIcon}" ToolTip="Alter the visual opacity of the image" Visibility="Visible"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
codeproject示例在这里http://www.codeproject.com/Articles/22952/WPF-Diagram-Designer-Part
答案 0 :(得分:1)
A)使用类似以下代码段的内容从应用的模板中获取滑块。
var slider = opacityAdorner.Template.FindName("OpacitySlider", opacityAdorner) as Slider;
在某些情况下,模板尚未应用,在这种情况下,您需要在上一次调用之前使用以下内容:
opacityAdorner.ApplyTemplate();
B)与视图模型联系的最佳方法(在我看来)是在OpacityChrome
装配器上公开所需属性为依赖属性。然后使用普通Binding
将新属性连接到视图模型,然后使用TemplateBinding
将它们连接到模板元素。