以 xaml 定义的样式访问元素
Accessing elements in a xaml defined style
我按照 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>
代码项目示例在这里http://www.codeproject.com/Articles/22952/WPF-Diagram-Designer-Part
A) 使用类似于以下代码片段的内容从应用的模板中获取滑块。
var slider = opacityAdorner.Template.FindName("OpacitySlider", opacityAdorner) as Slider;
有些情况下模板尚未应用,在这种情况下,您需要在上一次调用之前执行以下操作:
opacityAdorner.ApplyTemplate();
B) 连接视图模型的最佳方法(在我看来)是在 OpacityChrome
装饰器上将所需属性公开为 依赖属性 。然后,您使用普通 Binding
将新属性连接到视图模型,并使用 TemplateBinding
将它们连接到模板元素。
我按照 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>
代码项目示例在这里http://www.codeproject.com/Articles/22952/WPF-Diagram-Designer-Part
A) 使用类似于以下代码片段的内容从应用的模板中获取滑块。
var slider = opacityAdorner.Template.FindName("OpacitySlider", opacityAdorner) as Slider;
有些情况下模板尚未应用,在这种情况下,您需要在上一次调用之前执行以下操作:
opacityAdorner.ApplyTemplate();
B) 连接视图模型的最佳方法(在我看来)是在 OpacityChrome
装饰器上将所需属性公开为 依赖属性 。然后,您使用普通 Binding
将新属性连接到视图模型,并使用 TemplateBinding
将它们连接到模板元素。