使用item的属性将项目突出显示到ControlTemplate中

时间:2012-06-20 06:11:33

标签: .net wpf styles datatemplate controltemplate

我有一个绑定到适当ViewModel的用户控件。我在此控件上有一个GraphLayout(使用Graph#)绑定到ViewModel.Graph属性:

<graph:ProductGraphLayout Graph="{Binding Path=Graph}" />

许多包含ProductVertex的VertexControl都放在此布局上。内容由DataTemplate表示,并使用Style:

应用主题
<DataTemplate x:Key="VertexTemplate" DataType="{x:Type graph:ProductVertex}">
    <TextBlock Text="{Binding Path=ID, Mode=OneWay}" />
</DataTemplate>
<Style TargetType="{x:Type graphsharp:VertexControl}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type graphsharp:VertexControl}">
                <Border>
                    <Border.Style>
                        <Style TargetType="{x:Type Border}">
                            <Setter Property="BorderBrush" Value="#6695C4" />
                            <Setter Property="BorderThickness" Value="2" />
                        </Style>
                    </Border.Style>
                    <ContentPresenter Content="{TemplateBinding Vertex}" ContentTemplate="{StaticResource VertexTemplate}" />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

如何根据ProductVertex属性更改容器的样式(VertexControl),比如IsCurrent?

2 个答案:

答案 0 :(得分:1)

据我了解数据结构,您可以将ProductVertex对象与ControlTemplate的{​​{1}}一起使用。你现在可以,例如使用ValueConverter根据顶点对象更改边框的颜色。

VertexControl

答案 1 :(得分:1)

似乎我自己管理如何实现这一目标:

<DataTemplate x:Key="VertexTemplate" DataType="{x:Type graph:ProductSubstitutionVertex}">
    <TextBlock Text="{Binding Path=ID, Mode=OneWay}">
        <TextBlock.Style>
            <Style TargetType="TextBlock">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsCurrent}" Value="true">
                        <Setter Property="Background" Value="#EDF2F6" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
</DataTemplate>