风格类型的依赖属性

时间:2014-04-08 20:13:58

标签: wpf wpf-controls dependency-properties

我想将Style公开为依赖属性。基本上中间有一个矩形指示器,using控件将公开一个样式依赖属性,用于包含要设置的控件。它将允许那些包含控件的人根据他们自己的项目知识提供着色样式。

<ItemsControl ItemsSource="{Binding Rows}">
   <ItemsControl.ItemTemplate>
       <DataTemplate>
           <StackPanel Orientation="Horizontal">
               <TextBlock Text="{Binding RowName}"/>
               <ItemsControl ItemsSource="{Binding Statuses}">

                    <Rectangle Style="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Grid}, Path=RectangleStyle}"/>
               </ItemsControl>
           </StackPanel>
       </DataTemplate>
   </ItemsControl.ItemTemplate>
</ItemsControl>

自定义控件的代码隐藏中的依赖项属性。

    public Style RectangleStyle
    {
        get { return (Style)GetValue(RectangleStyleProperty); }
        set { SetValue(RectangleStyleProperty, value); }
    }

    public static readonly DependencyProperty RectangleStyleProperty =
        DependencyProperty.Register("RectangleStyle", typeof(Style), typeof(MyControl), new PropertyMetadata(null));

然后使用它:

    <MyControl>
        <MyControl.RectangleStyle>
            <Style TargetType="{x:Type Rectangle}">
                <Setter Property="Fill" Value="Red"/>
            </Style>
        </MyControl.RectangleStyle>
    </MyControl>

这根本不起作用,我不确定我的方法是否正确。

1 个答案:

答案 0 :(得分:0)

愚蠢的语法错误。我需要为Inner ItemsControl设置ItemsTemplate。我将ItemsControl的内容设置为Rectangle。

<ItemsControl ItemsSource="{Binding Rows}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding RowName}"/>
                <ItemsControl ItemsSource="{Binding Statuses}">
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <StackPanel Orientation="Horizontal"/>
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Rectangle Style="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Grid}, Path=RectangleStyle}"/>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>