WPF树控件自定义样式


    <!--树控件样式-->
    <PathGeometry x:Key="TreeArrow" Figures="M0,0 L0,6 L6,0 z" />
    <Style x:Key="ExpandCollapseToggleStyle" TargetType="{x:Type ToggleButton}">
        <Setter Property="Background" Value="Transparent" />
        <Setter Property="Focusable" Value="False" />
        <Setter Property="Foreground" Value="#127bbb" />
        <Setter Property="Height" Value="16" />
        <Setter Property="Margin" Value="1" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ToggleButton}">
                    <Grid Width="16"
                          Height="16"
                          Margin="{TemplateBinding Margin}"
                          Background="Transparent">
                        <Path x:Name="ExpandPath"
                              HorizontalAlignment="Center"
                              VerticalAlignment="Center"
                              Data="{StaticResource TreeArrow}"
                              Fill="{TemplateBinding Background}"
                              Stroke="{TemplateBinding Foreground}">
                            <Path.RenderTransform>
                                <RotateTransform Angle="135" CenterX="3" CenterY="3" />
                            </Path.RenderTransform>
                        </Path>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsChecked" Value="True">
                            <Setter TargetName="ExpandPath" Property="Fill" Value="#FF127bbb" />
                            <Setter TargetName="ExpandPath" Property="RenderTransform">
                                <Setter.Value>
                                    <RotateTransform Angle="180" CenterX="3" CenterY="3" />
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter TargetName="ExpandPath" Property="Stroke" Value="#FF555500" />
                        </Trigger>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsEnabled" Value="False" />
                                <Condition Property="IsChecked" Value="True" />
                            </MultiTrigger.Conditions>
                            <Setter TargetName="ExpandPath" Property="Fill" Value="#FF555555" />
                            <Setter TargetName="ExpandPath" Property="Stroke" Value="#FF555555" />
                        </MultiTrigger>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="ExpandPath" Property="Fill" Value="#FFFF5555" />
                            <Setter TargetName="ExpandPath" Property="Stroke" Value="#FFFF5555" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="Width" Value="16" />
    </Style>

    <Style  TargetType="{x:Type TreeViewItem}">
        <Setter Property="Foreground" Value="{DynamicResource foreground_Main}"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TreeViewItem}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition  Width="16"/>
                            <ColumnDefinition/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition/>
                            <RowDefinition/>
                        </Grid.RowDefinitions>
                        <Border Grid.ColumnSpan="2"   x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"  SnapsToDevicePixels="true"/>
                        <ToggleButton  x:Name="Expander" ClickMode="Press" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource ExpandCollapseToggleStyle}"/>
                        <ContentPresenter Grid.Column="1" x:Name="PART_Header" ContentSource="Header" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                        <ItemsPresenter  x:Name="ItemsHost" Grid.ColumnSpan="2" Grid.Column="1" Grid.Row="1"/>

                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsExpanded" Value="false">
                            <Setter Property="Visibility" TargetName="ItemsHost" Value="Collapsed"/>
                        </Trigger>
                        <Trigger Property="HasItems" Value="false">
                            <Setter Property="Visibility" TargetName="Expander" Value="Hidden"/>
                        </Trigger>
                        <Trigger Property="IsSelected" Value="true">
                            <Setter Property="Background" TargetName="Bd" Value="#FFAEDDF9" />

                            <Setter Property="Background" TargetName="Expander" Value="#FFAEDDF9"/>
                        </Trigger>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsSelected" Value="true"/>
                                <Condition Property="IsSelectionActive" Value="false"/>
                            </MultiTrigger.Conditions>
                            <Setter Property="Background" TargetName="Bd" Value="#FFAEDDF9"/>

                            <Setter Property="Background" TargetName="Expander" Value="#FFAEDDF9"/>
                        </MultiTrigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF(Windows Presentation Foundation)是微软开发的一种基于.NET Framework的图形显示子系统,用于开发用户界面和图形相关的应用程序。在WPF中,我们可以使用自定义控件自定义属性来满足特定的需求和设计要求。 自定义控件是通过继承现有的WPF控件类来实现的。通过继承,我们可以重写控件的行为和外观,添加自定义的功能和特性。例如,我们可以创建一个名为CustomButton的自定义按钮控件,添加额外的事件、样式和布局等。自定义控件使得我们能够灵活地调整和扩展现有的控件库,使应用程序的用户界面更加独特和富有创意。 自定义属性是在自定义控件中添加的自定义属性。这些属性可以满足特定的设计需求,可以通过属性设置来改变控件的行为和外观。例如,在CustomButton控件中,我们可以添加一个名为CustomColor的自定义属性,用于设置按钮的背景颜色。通过在XAML中设置CustomButton的CustomColor属性值,我们可以实现按钮背景颜色的动态修改。 对于自定义属性的实现,我们需要先在控件类中定义一个依赖属性,并为这个属性添加属性变更回调函数。这样,当属性的值发生变化时,回调函数会被触发,我们可以在回调函数中执行相应的逻辑操作。在XAML中,我们可以通过控件的标签属性来设置自定义属性的值,也可以使用数据绑定的方式将属性与其他对象关联起来。 总之,WPF自定义控件自定义属性给我们在开发中提供了更多灵活性和定制性。我们可以根据具体的需求创建独特的控件,通过自定义属性来调整控件的行为和外观。这些功能使得我们能够更好地满足用户的需求,创建更加丰富和个性化的应用程序界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值