以xaml定义的样式访问元素

时间:2015-02-23 18:58:21

标签: c# wpf xaml

我已经按照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

1 个答案:

答案 0 :(得分:1)

A)使用类似以下代码段的内容从应用的模板中获取滑块。

var slider = opacityAdorner.Template.FindName("OpacitySlider", opacityAdorner) as Slider;

在某些情况下,模板尚未应用,在这种情况下,您需要在上一次调用之前使用以下内容:

opacityAdorner.ApplyTemplate();

B)与视图模型联系的最佳方法(在我看来)是在OpacityChrome装配器上公开所需属性为依赖属性。然后使用普通Binding将新属性连接到视图模型,然后使用TemplateBinding将它们连接到模板元素。