自定义wpf扩展器控件 [英] Customizing wpf expander control
问题描述
我正在尝试在wpf中更改扩展器的ToggleButton箭头.... 完整的控件模板代码是:
< SolidColorBrush x:Key =" Expander.MouseOver.Circle.Stroke"颜色="#FFFFFFFF" />
< SolidColorBrush x:Key =" Expander.MouseOver.Circle.Fill"颜色="#FFFFFFFF" />
< SolidColorBrush x:Key =" Expander.MouseOver.Arrow.Stroke"颜色="#FF0583CB" />
< SolidColorBrush x:Key =" Expander.Pressed.Circle.Stroke"颜色="#FFFFFFFF" />
< SolidColorBrush x:Key =" Expander.Pressed.Circle.Fill"颜色="#FFFFFFFF" />
< SolidColorBrush x:Key =" Expander.Pressed.Arrow.Stroke"颜色="#FF0583CB" />
< SolidColorBrush x:Key =" Expander.Disabled.Circle.Stroke"颜色="#FFFFFFFF" />
< SolidColorBrush x:Key =" Expander.Disabled.Circle.Fill"颜色="#FFFFFFFF" />
< SolidColorBrush x:Key =" Expander.Disabled.Arrow.Stroke"颜色="#FF0583CB" />
< SolidColorBrush x:Key =" Expander.Static.Circle.Fill"颜色="#FFFFFFFF" />
< SolidColorBrush x:Key =" Expander.Static.Circle.Stroke"颜色="#FFFFFFFF" />
< SolidColorBrush x:Key =" Expander.Static.Arrow.Stroke"颜色="#FF0583CB" />
< Style x:Key =" ExpanderRightHeaderStyle" TargetType =" {x:Type ToggleButton}">
< Setter Property =" Template">
< Setter.Value>
< ControlTemplate TargetType =" {x:Type ToggleButton}">
< Border Padding =" {TemplateBinding Padding}">
<网格背景="透明" SnapsToDevicePixels = QUOT假QUOT;>
< Grid.RowDefinitions>
< RowDefinition Height =" 19" />
< RowDefinition Height =" *" />
< /Grid.RowDefinitions>
< Grid>
< Grid.LayoutTransform>
< TransformGroup>
< TransformGroup.Children>
< TransformCollection>
< RotateTransform Angle =" -90" />
< / TransformCollection>
< /TransformGroup.Children>
< / TransformGroup>
< /Grid.LayoutTransform>
< Ellipse x:Name =" circle" Fill =" {StaticResource Expander.Static.Circle.Fill}"的HorizontalAlignment = QUOT;中心"高度= QUOT 19 QUOT; Stroke =" {StaticResource Expander.Static.Circle.Stroke}" VerticalAlignment = QUOT;中心"宽度= QUOT 19 QUOT; />
<路径x:名称="箭头"数据="M 1,1.5 L 1.5,5 L 8,1.5"的HorizontalAlignment = QUOT;中心" SnapsToDevicePixels = QUOT假QUOT; Stroke =" {StaticResource Expander.Static.Arrow.Stroke}" StrokeThickness = QUOT; 2英寸VerticalAlignment = QUOT;中心" />
< / Grid>
< ContentPresenter HorizontalAlignment =" Center"余量= QUOT; 0,4,0,0" Grid.Row = QUOT 1 QUOT; RecognizesAccessKey = QUOT;真" SnapsToDevicePixels = QUOT;真" VerticalAlignment = QUOT;顶部和QUOT; />
< / Grid>
< / Border>
< ControlTemplate.Triggers>
< Trigger Property =" IsChecked"值= QUOT;真">
< Setter Property =" Data"的TargetName = QUOT;箭头"值="M 1,4.5 L 4.5,1 L 8,4.5"/>
< / Trigger>
< Trigger Property =" IsMouseOver"值= QUOT;真">
< Setter Property =" Stroke"的TargetName = QUOT;圆" Value =" {StaticResource Expander.MouseOver.Circle.Stroke}" />
< Setter Property =" Fill"的TargetName = QUOT;圆" Value =" {StaticResource Expander.MouseOver.Circle.Fill}" />
< Setter Property =" Stroke"的TargetName = QUOT;箭头" Value =" {StaticResource Expander.MouseOver.Arrow.Stroke}" />
< / Trigger>
< Trigger Property =" IsPressed"值= QUOT;真">
< Setter Property =" Stroke"的TargetName = QUOT;圆" Value =" {StaticResource Expander.Pressed.Circle.Stroke}" />
< Setter Property =" StrokeThickness"的TargetName = QUOT;圆"值= QUOT; 1.5" />
< Setter Property =" Fill"的TargetName = QUOT;圆" Value =" {StaticResource Expander.Pressed.Circle.Fill}" />
< Setter Property =" Stroke"的TargetName = QUOT;箭头" Value =" {StaticResource Expander.Pressed.Arrow.Stroke}" />
< / Trigger>
< Trigger Property =" IsEnabled"值= QUOT假QUOT;>
< Setter Property =" Stroke"的TargetName = QUOT;圆" Value =" {StaticResource Expander.Disabled.Circle.Stroke}" />
< Setter Property =" Fill"的TargetName = QUOT;圆" Value =" {StaticResource Expander.Disabled.Circle.Fill}" />
< Setter Property =" Stroke"的TargetName = QUOT;箭头" Value =" {StaticResource Expander.Disabled.Arrow.Stroke}" />
< / Trigger>
< /ControlTemplate.Triggers>
< / ControlTemplate>
< /Setter.Value>
< / Setter>
< / Style>
< Style x:Key =" ExpanderUpHeaderStyle" TargetType =" {x:Type ToggleButton}">
< Setter Property =" Template">
< Setter.Value>
< ControlTemplate TargetType =" {x:Type ToggleButton}">
< Border Padding =" {TemplateBinding Padding}">
<网格背景="透明" SnapsToDevicePixels = QUOT假QUOT;>
< Grid.ColumnDefinitions>
< ColumnDefinition Width =" 19" />
< ColumnDefinition Width =" *" />
< /Grid.ColumnDefinitions>
< Grid>
< Grid.LayoutTransform>
< TransformGroup>
< TransformGroup.Children>
< TransformCollection>
< RotateTransform Angle =" 180" />
< / TransformCollection>
< /TransformGroup.Children>
< / TransformGroup>
< /Grid.LayoutTransform>
< Ellipse x:Name =" circle" Fill =" {StaticResource Expander.Static.Circle.Fill}"的HorizontalAlignment = QUOT;中心"高度= QUOT 19 QUOT; Stroke =" {StaticResource Expander.Static.Circle.Stroke}" VerticalAlignment = QUOT;中心"宽度= QUOT 19 QUOT; />
<路径x:名称="箭头"数据="M 1,1.5 L 4.5,5 L 8,4.5"的HorizontalAlignment = QUOT;中心" SnapsToDevicePixels = QUOT假QUOT; Stroke =" {StaticResource Expander.Static.Arrow.Stroke}" StrokeThickness = QUOT; 2英寸VerticalAlignment = QUOT;中心" />
< / Grid>
< ContentPresenter Grid.Column =" 1"的HorizontalAlignment = QUOT;左"余量= QUOT; 4,0,0,0" RecognizesAccessKey = QUOT;真" SnapsToDevicePixels = QUOT;真" VerticalAlignment = QUOT;中心" />
< / Grid>
< / Border>
< ControlTemplate.Triggers>
< Trigger Property =" IsChecked"值= QUOT;真">
< Setter Property =" Data"的TargetName = QUOT;箭头"值="M 1,4.5 L 4.5,1 L 8,4.5"/>
< / Trigger>
< Trigger Property =" IsMouseOver"值= QUOT;真">
< Setter Property =" Stroke"的TargetName = QUOT;圆" Value =" {StaticResource Expander.MouseOver.Circle.Stroke}" />
< Setter Property =" Fill"的TargetName = QUOT;圆" Value =" {StaticResource Expander.MouseOver.Circle.Fill}" />
< Setter Property =" Stroke"的TargetName = QUOT;箭头" Value =" {StaticResource Expander.MouseOver.Arrow.Stroke}" />
< / Trigger>
< Trigger Property =" IsPressed"值= QUOT;真">
< Setter Property =" Stroke"的TargetName = QUOT;圆" Value =" {StaticResource Expander.Pressed.Circle.Stroke}" />
< Setter Property =" StrokeThickness"的TargetName = QUOT;圆"值= QUOT; 1.5" />
< Setter Property =" Fill"的TargetName = QUOT;圆" Value =" {StaticResource Expander.Pressed.Circle.Fill}" />
< Setter Property =" Stroke"的TargetName = QUOT;箭头" Value =" {StaticResource Expander.Pressed.Arrow.Stroke}" />
< / Trigger>
< Trigger Property =" IsEnabled"值= QUOT假QUOT;>
< Setter Property =" Stroke"的TargetName = QUOT;圆" Value =" {StaticResource Expander.Disabled.Circle.Stroke}" />
< Setter Property =" Fill"的TargetName = QUOT;圆" Value =" {StaticResource Expander.Disabled.Circle.Fill}" />
< Setter Property =" Stroke"的TargetName = QUOT;箭头" Value =" {StaticResource Expander.Disabled.Arrow.Stroke}" />
< / Trigger>
< /ControlTemplate.Triggers>
< / ControlTemplate>
< /Setter.Value>
< / Setter>
< / Style>
< Style x:Key =" ExpanderLeftHeaderStyle" TargetType =" {x:Type ToggleButton}">
< Setter Property =" Template">
< Setter.Value>
< ControlTemplate TargetType =" {x:Type ToggleButton}">
< Border Padding =" {TemplateBinding Padding}">
<网格背景="透明" SnapsToDevicePixels = QUOT假QUOT;>
< Grid.RowDefinitions>
< RowDefinition Height =" 19" />
< RowDefinition Height =" *" />
< /Grid.RowDefinitions>
< Grid>
< Grid.LayoutTransform>
< TransformGroup>
< TransformGroup.Children>
< TransformCollection>
< RotateTransform Angle =" 90" />
< / TransformCollection>
< /TransformGroup.Children>
< / TransformGroup>
< /Grid.LayoutTransform>
< Ellipse x:Name =" circle" Fill =" {StaticResource Expander.Static.Circle.Fill}"的HorizontalAlignment = QUOT;中心"高度= QUOT 19 QUOT; Stroke =" {StaticResource Expander.Static.Circle.Stroke}" VerticalAlignment = QUOT;中心"宽度= QUOT 19 QUOT; />
<路径x:名称="箭头"数据="M 13,4.5 L 4.5,5 L 8,4.5"的HorizontalAlignment = QUOT;中心" SnapsToDevicePixels = QUOT假QUOT; Stroke =" {StaticResource Expander.Static.Arrow.Stroke}" StrokeThickness = QUOT; 2英寸VerticalAlignment = QUOT;中心" />
< / Grid>
< ContentPresenter HorizontalAlignment =" Center"余量= QUOT; 0,4,0,0" Grid.Row = QUOT 1 QUOT; RecognizesAccessKey = QUOT;真" SnapsToDevicePixels = QUOT;真" VerticalAlignment = QUOT;顶部和QUOT; />
< / Grid>
< / Border>
< ControlTemplate.Triggers>
< Trigger Property =" IsChecked"值= QUOT;真">
< Setter Property =" Data"的TargetName = QUOT;箭头"值="M 1,4.5 L 4.5,1 L 8,4.5"/>
< / Trigger>
< Trigger Property =" IsMouseOver"值= QUOT;真">
< Setter Property =" Stroke"的TargetName = QUOT;圆" Value =" {StaticResource Expander.MouseOver.Circle.Stroke}" />
< Setter Property =" Fill"的TargetName = QUOT;圆" Value =" {StaticResource Expander.MouseOver.Circle.Fill}" />
< Setter Property =" Stroke"的TargetName = QUOT;箭头" Value =" {StaticResource Expander.MouseOver.Arrow.Stroke}" />
< / Trigger>
< Trigger Property =" IsPressed"值= QUOT;真">
< Setter Property =" Stroke"的TargetName = QUOT;圆" Value =" {StaticResource Expander.Pressed.Circle.Stroke}" />
< Setter Property =" StrokeThickness"的TargetName = QUOT;圆"值= QUOT; 1.5" />
< Setter Property =" Fill"的TargetName = QUOT;圆" Value =" {StaticResource Expander.Pressed.Circle.Fill}" />
< Setter Property =" Stroke"的TargetName = QUOT;箭头" Value =" {StaticResource Expander.Pressed.Arrow.Stroke}" />
< / Trigger>
< Trigger Property =" IsEnabled"值= QUOT假QUOT;>
< Setter Property =" Stroke"的TargetName = QUOT;圆" Value =" {StaticResource Expander.Disabled.Circle.Stroke}" />
< Setter Property =" Fill"的TargetName = QUOT;圆" Value =" {StaticResource Expander.Disabled.Circle.Fill}" />
< Setter Property =" Stroke"的TargetName = QUOT;箭头" Value =" {StaticResource Expander.Disabled.Arrow.Stroke}" />
< / Trigger>
< /ControlTemplate.Triggers>
< / ControlTemplate>
< /Setter.Value>
< / Setter>
< / Style>
< Style x:Key =" ExpanderHeaderFocusVisual">
< Setter Property =" Control.Template">
< Setter.Value>
< ControlTemplate>
< Border>
< Rectangle Margin =" 0" SnapsToDevicePixels = QUOT;真"行程="黑色" StrokeThickness = QUOT 1 QUOT; StrokeDashArray =" 1 2" />
< / Border>
< / ControlTemplate>
< /Setter.Value>
< / Setter>
< / Style>
< Style x:Key =" ExpanderDownHeaderStyle" TargetType =" {x:Type ToggleButton}">
< Setter Property =" Template">
< Setter.Value>
< ControlTemplate TargetType =" {x:Type ToggleButton}">
< Border Padding =" {TemplateBinding Padding}">
<网格背景="透明" SnapsToDevicePixels = QUOT假QUOT;>
< Grid.ColumnDefinitions>
< ColumnDefinition Width =" 19" />
< ColumnDefinition Width =" *" />
< /Grid.ColumnDefinitions>
< Ellipse x:Name =" circle"的HorizontalAlignment = QUOT;中心"高度= QUOT 19 QUOT; Stroke =" {StaticResource Expander.Static.Circle.Stroke}" VerticalAlignment = QUOT;中心"宽度= QUOT 19 QUOT;>
< / Ellipse>
<路径x:名称="箭头"数据="M 8 9 12 12 8 15"的HorizontalAlignment = QUOT;中心" SnapsToDevicePixels = QUOT假QUOT; Stroke =" {StaticResource Expander.Static.Arrow.Stroke}" StrokeThickness = QUOT; 2英寸VerticalAlignment = QUOT;中心" >
< / Path>
< ContentPresenter Grid.Column =" 1"的HorizontalAlignment = QUOT;左"余量= QUOT; 4,0,0,0" RecognizesAccessKey = QUOT;真" SnapsToDevicePixels = QUOT;真" VerticalAlignment = QUOT;中心" />
< / Grid>
< / Border>
< ControlTemplate.Triggers>
< Trigger Property =" IsChecked"值= QUOT;真">
< Setter Property =" Data"的TargetName = QUOT;箭头"值="M -1,-4.5 L -4.5,-1 L -8,-4.5"/>
< Setter Property =" Margin"的TargetName = QUOT;箭头"值= QUOT; 5,4,-4.8,-2.8" />
< / Trigger>
< Trigger Property =" IsMouseOver"值= QUOT;真">
< Setter Property =" Stroke"的TargetName = QUOT;圆" Value =" {StaticResource Expander.MouseOver.Circle.Stroke}" />
< Setter Property =" Fill"的TargetName = QUOT;圆" Value =" {StaticResource Expander.MouseOver.Circle.Fill}" />
< Setter Property =" Stroke"的TargetName = QUOT;箭头" Value =" {StaticResource Expander.MouseOver.Arrow.Stroke}" />
< / Trigger>
< Trigger Property =" IsPressed"值= QUOT;真">
< Setter Property =" Stroke"的TargetName = QUOT;圆" Value =" {StaticResource Expander.Pressed.Circle.Stroke}" />
< Setter Property =" StrokeThickness"的TargetName = QUOT;圆"值= QUOT; 1.5" />
< Setter Property =" Fill"的TargetName = QUOT;圆" Value =" {StaticResource Expander.Pressed.Circle.Fill}" />
< Setter Property =" Stroke"的TargetName = QUOT;箭头" Value =" {StaticResource Expander.Pressed.Arrow.Stroke}" />
< / Trigger>
< Trigger Property =" IsEnabled"值= QUOT假QUOT;>
< Setter Property =" Stroke"的TargetName = QUOT;圆" Value =" {StaticResource Expander.Disabled.Circle.Stroke}" />
< Setter Property =" Fill"的TargetName = QUOT;圆" Value =" {StaticResource Expander.Disabled.Circle.Fill}" />
< Setter Property =" Stroke"的TargetName = QUOT;箭头" Value =" {StaticResource Expander.Disabled.Arrow.Stroke}" />
< / Trigger>
< /ControlTemplate.Triggers>
< / ControlTemplate>
< /Setter.Value>
< / Setter>
< / Style>
< Style x:Key =" ExpanderStyle1" TargetType =" {x:Type Expander}">
< Setter Property =" Foreground" Value =" {DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" />
< Setter Property =" Background"值= QUOT;透明" />
< Setter Property =" HorizontalContentAlignment"值= QUOT;拉伸" />
< Setter Property =" VerticalContentAlignment"值= QUOT;拉伸" />
< Setter Property =" BorderBrush"值= QUOT;透明" />
< Setter Property =" BorderThickness"值= QUOT 1 QUOT; />
< Setter Property =" Template">
< Setter.Value>
< ControlTemplate TargetType =" {x:Type Expander}">
< Border BorderBrush =" {TemplateBinding BorderBrush}" BorderThickness =" {TemplateBinding BorderThickness}" Background =" {TemplateBinding Background}" CornerRadius = QUOT; 3英寸SnapsToDevicePixels = QUOT;真">
< DockPanel>
< ToggleButton x:Name =" HeaderSite" ContentTemplate =" {TemplateBinding HeaderTemplate}" ContentTemplateSelector =" {TemplateBinding HeaderTemplateSelector}" Content =" {TemplateBinding Header}" DockPanel.Dock = QUOT;陀螺" Foreground =" {TemplateBinding Foreground}" FontWeight =" {TemplateBinding FontWeight}" FocusVisualStyle =" {StaticResource ExpanderHeaderFocusVisual}" FontStyle =" {TemplateBinding FontStyle}" FontStretch =" {TemplateBinding FontStretch}" FontSize =" {TemplateBinding FontSize}" FontFamily =" {TemplateBinding FontFamily}" HorizontalContentAlignment =" {TemplateBinding HorizontalContentAlignment}" IsChecked =" {Binding IsExpanded,Mode = TwoWay,RelativeSource = {RelativeSource TemplatedParent}}"余量= QUOT 1 QUOT; MinWidth = QUOT; 0"了minHeight = QUOT; 0" Padding =" {TemplateBinding Padding}" Style =" {StaticResource ExpanderDownHeaderStyle}" VerticalContentAlignment =" {TemplateBinding VerticalContentAlignment}" />
< ContentPresenter x:Name =" ExpandSite" DockPanel.Dock = QUOT;底座"可聚焦= QUOT假QUOT; HorizontalAlignment =" {TemplateBinding HorizontalContentAlignment}" Margin =" {TemplateBinding Padding}"能见度= QUOT;折叠" VerticalAlignment =" {TemplateBinding VerticalContentAlignment}" />
< / DockPanel>
< / Border>
< ControlTemplate.Triggers>
< Trigger Property =" IsExpanded"值= QUOT;真">
< Setter Property =" Visibility"的TargetName = QUOT; ExpandSite"值= QUOT;可见" />
< / Trigger>
< Trigger Property =" ExpandDirection"值= QUOT;右">
< Setter Property =" DockPanel.Dock"的TargetName = QUOT; ExpandSite"值= QUOT;右" />
< Setter Property =" DockPanel.Dock"的TargetName = QUOT; HeaderSite"值= QUOT;左" />
< Setter Property =" Style"的TargetName = QUOT; HeaderSite" Value =" {StaticResource ExpanderRightHeaderStyle}" />
< / Trigger>
< Trigger Property =" ExpandDirection"值= QUOT;多达">
< Setter Property =" DockPanel.Dock"的TargetName = QUOT; ExpandSite"值= QUOT;顶部和QUOT; />
< Setter Property =" DockPanel.Dock"的TargetName = QUOT; HeaderSite"值= QUOT;底座" />
< Setter Property =" Style"的TargetName = QUOT; HeaderSite" Value =" {StaticResource ExpanderUpHeaderStyle}" />
< / Trigger>
< Trigger Property =" ExpandDirection"值= QUOT;左">
< Setter Property =" DockPanel.Dock"的TargetName = QUOT; ExpandSite"值= QUOT;左" />
< Setter Property =" DockPanel.Dock"的TargetName = QUOT; HeaderSite"值= QUOT;右" />
< Setter Property =" Style"的TargetName = QUOT; HeaderSite" Value =" {StaticResource ExpanderLeftHeaderStyle}" />
< / Trigger>
< Trigger Property =" IsEnabled"值= QUOT假QUOT;>
< Setter Property =" Foreground" Value =" {DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
< / Trigger>
< /ControlTemplate.Triggers>
< / ControlTemplate>
< /Setter.Value>
< / Setter>
< / Style>
我的问题在这里:
(第1部分 - 右箭头)
<路径x:名称="箭头"数据="M 8 9 12 12 8 15"的HorizontalAlignment = QUOT;中心" SnapsToDevicePixels = QUOT假QUOT; Stroke =" {StaticResource Expander.Static.Arrow.Stroke}" StrokeThickness = QUOT; 2英寸VerticalAlignment = QUOT;中心" >
< / Path>
< ContentPresenter Grid.Column =" 1"的HorizontalAlignment = QUOT;左"余量= QUOT; 4,0,0,0" RecognizesAccessKey = QUOT;真" SnapsToDevicePixels = QUOT;真" VerticalAlignment = QUOT;中心" />
< / Grid>
< / Border>
(第2部分 - 向下箭头)
< ControlTemplate.Triggers>
< Trigger Property =" IsChecked"值= QUOT;真">
< Setter Property =" Data"的TargetName = QUOT;箭头"值="M -1,-4.5 L -4.5,-1 L -8,-4.5"/>
< Setter Property =" Margin"的TargetName = QUOT;箭头"值= QUOT; 5,4,-4.8,-2.8" />
< / Trigger>
第2部分 - 向下箭头中的代码完美无缺。但在第1部分中,我试图制作一个正确的箭头。第1部分中的路径点产生右箭头但是它与第2部分中的箭头大小不同。此外,第1部分的代码更改了右边的
箭头位置,它没有坚持第2部分中向下箭头的位置
图像1:drive.google。 com / open?id = 1d4uGK8c1ixqOEHzbUc9m2OKb6XWflnMa
image 2:drive.google.com/open?id=1hpIFIzKfg9LAroj4WJ_LvbJKWe33lTYf
image 3:drive.google。 com / open?id = 1Ic02TEA4adAQmtNB9Nd7-8tlGh4t_K4s
< blockquote>
给你的路径一个大小,使用stretch = fill并失去触发器的边距:
< Path x:Name =" arrow"
拉伸="填充"
数据="M 8 9 12 12 8 15"
高度=" 8"
Width =" 8"
HorizontalAlignment =" Center"
VerticalAlignment =" Center"
SnapsToDevicePixels =" false"
Stroke =" {StaticResource Expander.Static.Arrow.Stroke}" StrokeThickness = QUOT; 2英寸
> < /路径>
< ContentPresenter Grid.Column =" 1"的HorizontalAlignment = QUOT;左"余量= QUOT; 4,0,0,0" RecognizesAccessKey = QUOT;真" SnapsToDevicePixels = QUOT;真" VerticalAlignment = QUOT;中心" />
< / Grid>
< / Border>
< ControlTemplate.Triggers>
< Trigger Property =" IsChecked"值= QUOT;真">
< Setter Property =" Data"的TargetName = QUOT;箭头"值="M -1,-4.5 L -4.5,-1 L -8,-4.5"/>
< / Trigger>
I am trying to change the ToggleButton arrow of the expander in wpf.... The full control template code is :
<SolidColorBrush x:Key="Expander.MouseOver.Circle.Stroke" Color="#FFFFFFFF"/> <SolidColorBrush x:Key="Expander.MouseOver.Circle.Fill" Color="#FFFFFFFF"/> <SolidColorBrush x:Key="Expander.MouseOver.Arrow.Stroke" Color="#FF0583CB"/> <SolidColorBrush x:Key="Expander.Pressed.Circle.Stroke" Color="#FFFFFFFF"/> <SolidColorBrush x:Key="Expander.Pressed.Circle.Fill" Color="#FFFFFFFF"/> <SolidColorBrush x:Key="Expander.Pressed.Arrow.Stroke" Color="#FF0583CB"/> <SolidColorBrush x:Key="Expander.Disabled.Circle.Stroke" Color="#FFFFFFFF"/> <SolidColorBrush x:Key="Expander.Disabled.Circle.Fill" Color="#FFFFFFFF"/> <SolidColorBrush x:Key="Expander.Disabled.Arrow.Stroke" Color="#FF0583CB"/> <SolidColorBrush x:Key="Expander.Static.Circle.Fill" Color="#FFFFFFFF"/> <SolidColorBrush x:Key="Expander.Static.Circle.Stroke" Color="#FFFFFFFF"/> <SolidColorBrush x:Key="Expander.Static.Arrow.Stroke" Color="#FF0583CB"/> <Style x:Key="ExpanderRightHeaderStyle" TargetType="{x:Type ToggleButton}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ToggleButton}"> <Border Padding="{TemplateBinding Padding}"> <Grid Background="Transparent" SnapsToDevicePixels="False"> <Grid.RowDefinitions> <RowDefinition Height="19"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Grid> <Grid.LayoutTransform> <TransformGroup> <TransformGroup.Children> <TransformCollection> <RotateTransform Angle="-90"/> </TransformCollection> </TransformGroup.Children> </TransformGroup> </Grid.LayoutTransform> <Ellipse x:Name="circle" Fill="{StaticResource Expander.Static.Circle.Fill}" HorizontalAlignment="Center" Height="19" Stroke="{StaticResource Expander.Static.Circle.Stroke}" VerticalAlignment="Center" Width="19"/> <Path x:Name="arrow" Data="M 1,1.5 L 1.5,5 L 8,1.5" HorizontalAlignment="Center" SnapsToDevicePixels="false" Stroke="{StaticResource Expander.Static.Arrow.Stroke}" StrokeThickness="2" VerticalAlignment="Center"/> </Grid> <ContentPresenter HorizontalAlignment="Center" Margin="0,4,0,0" Grid.Row="1" RecognizesAccessKey="True" SnapsToDevicePixels="True" VerticalAlignment="Top"/> </Grid> </Border> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="true"> <Setter Property="Data" TargetName="arrow" Value="M 1,4.5 L 4.5,1 L 8,4.5"/> </Trigger> <Trigger Property="IsMouseOver" Value="true"> <Setter Property="Stroke" TargetName="circle" Value="{StaticResource Expander.MouseOver.Circle.Stroke}"/> <Setter Property="Fill" TargetName="circle" Value="{StaticResource Expander.MouseOver.Circle.Fill}"/> <Setter Property="Stroke" TargetName="arrow" Value="{StaticResource Expander.MouseOver.Arrow.Stroke}"/> </Trigger> <Trigger Property="IsPressed" Value="true"> <Setter Property="Stroke" TargetName="circle" Value="{StaticResource Expander.Pressed.Circle.Stroke}"/> <Setter Property="StrokeThickness" TargetName="circle" Value="1.5"/> <Setter Property="Fill" TargetName="circle" Value="{StaticResource Expander.Pressed.Circle.Fill}"/> <Setter Property="Stroke" TargetName="arrow" Value="{StaticResource Expander.Pressed.Arrow.Stroke}"/> </Trigger> <Trigger Property="IsEnabled" Value="false"> <Setter Property="Stroke" TargetName="circle" Value="{StaticResource Expander.Disabled.Circle.Stroke}"/> <Setter Property="Fill" TargetName="circle" Value="{StaticResource Expander.Disabled.Circle.Fill}"/> <Setter Property="Stroke" TargetName="arrow" Value="{StaticResource Expander.Disabled.Arrow.Stroke}"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="ExpanderUpHeaderStyle" TargetType="{x:Type ToggleButton}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ToggleButton}"> <Border Padding="{TemplateBinding Padding}"> <Grid Background="Transparent" SnapsToDevicePixels="False"> <Grid.ColumnDefinitions> <ColumnDefinition Width="19"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Grid> <Grid.LayoutTransform> <TransformGroup> <TransformGroup.Children> <TransformCollection> <RotateTransform Angle="180"/> </TransformCollection> </TransformGroup.Children> </TransformGroup> </Grid.LayoutTransform> <Ellipse x:Name="circle" Fill="{StaticResource Expander.Static.Circle.Fill}" HorizontalAlignment="Center" Height="19" Stroke="{StaticResource Expander.Static.Circle.Stroke}" VerticalAlignment="Center" Width="19"/> <Path x:Name="arrow" Data="M 1,1.5 L 4.5,5 L 8,4.5" HorizontalAlignment="Center" SnapsToDevicePixels="false" Stroke="{StaticResource Expander.Static.Arrow.Stroke}" StrokeThickness="2" VerticalAlignment="Center"/> </Grid> <ContentPresenter Grid.Column="1" HorizontalAlignment="Left" Margin="4,0,0,0" RecognizesAccessKey="True" SnapsToDevicePixels="True" VerticalAlignment="Center"/> </Grid> </Border> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="true"> <Setter Property="Data" TargetName="arrow" Value="M 1,4.5 L 4.5,1 L 8,4.5"/> </Trigger> <Trigger Property="IsMouseOver" Value="true"> <Setter Property="Stroke" TargetName="circle" Value="{StaticResource Expander.MouseOver.Circle.Stroke}"/> <Setter Property="Fill" TargetName="circle" Value="{StaticResource Expander.MouseOver.Circle.Fill}"/> <Setter Property="Stroke" TargetName="arrow" Value="{StaticResource Expander.MouseOver.Arrow.Stroke}"/> </Trigger> <Trigger Property="IsPressed" Value="true"> <Setter Property="Stroke" TargetName="circle" Value="{StaticResource Expander.Pressed.Circle.Stroke}"/> <Setter Property="StrokeThickness" TargetName="circle" Value="1.5"/> <Setter Property="Fill" TargetName="circle" Value="{StaticResource Expander.Pressed.Circle.Fill}"/> <Setter Property="Stroke" TargetName="arrow" Value="{StaticResource Expander.Pressed.Arrow.Stroke}"/> </Trigger> <Trigger Property="IsEnabled" Value="false"> <Setter Property="Stroke" TargetName="circle" Value="{StaticResource Expander.Disabled.Circle.Stroke}"/> <Setter Property="Fill" TargetName="circle" Value="{StaticResource Expander.Disabled.Circle.Fill}"/> <Setter Property="Stroke" TargetName="arrow" Value="{StaticResource Expander.Disabled.Arrow.Stroke}"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="ExpanderLeftHeaderStyle" TargetType="{x:Type ToggleButton}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ToggleButton}"> <Border Padding="{TemplateBinding Padding}"> <Grid Background="Transparent" SnapsToDevicePixels="False"> <Grid.RowDefinitions> <RowDefinition Height="19"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Grid> <Grid.LayoutTransform> <TransformGroup> <TransformGroup.Children> <TransformCollection> <RotateTransform Angle="90"/> </TransformCollection> </TransformGroup.Children> </TransformGroup> </Grid.LayoutTransform> <Ellipse x:Name="circle" Fill="{StaticResource Expander.Static.Circle.Fill}" HorizontalAlignment="Center" Height="19" Stroke="{StaticResource Expander.Static.Circle.Stroke}" VerticalAlignment="Center" Width="19"/> <Path x:Name="arrow" Data="M 13,4.5 L 4.5,5 L 8,4.5" HorizontalAlignment="Center" SnapsToDevicePixels="false" Stroke="{StaticResource Expander.Static.Arrow.Stroke}" StrokeThickness="2" VerticalAlignment="Center"/> </Grid> <ContentPresenter HorizontalAlignment="Center" Margin="0,4,0,0" Grid.Row="1" RecognizesAccessKey="True" SnapsToDevicePixels="True" VerticalAlignment="Top"/> </Grid> </Border> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="true"> <Setter Property="Data" TargetName="arrow" Value="M 1,4.5 L 4.5,1 L 8,4.5"/> </Trigger> <Trigger Property="IsMouseOver" Value="true"> <Setter Property="Stroke" TargetName="circle" Value="{StaticResource Expander.MouseOver.Circle.Stroke}"/> <Setter Property="Fill" TargetName="circle" Value="{StaticResource Expander.MouseOver.Circle.Fill}"/> <Setter Property="Stroke" TargetName="arrow" Value="{StaticResource Expander.MouseOver.Arrow.Stroke}"/> </Trigger> <Trigger Property="IsPressed" Value="true"> <Setter Property="Stroke" TargetName="circle" Value="{StaticResource Expander.Pressed.Circle.Stroke}"/> <Setter Property="StrokeThickness" TargetName="circle" Value="1.5"/> <Setter Property="Fill" TargetName="circle" Value="{StaticResource Expander.Pressed.Circle.Fill}"/> <Setter Property="Stroke" TargetName="arrow" Value="{StaticResource Expander.Pressed.Arrow.Stroke}"/> </Trigger> <Trigger Property="IsEnabled" Value="false"> <Setter Property="Stroke" TargetName="circle" Value="{StaticResource Expander.Disabled.Circle.Stroke}"/> <Setter Property="Fill" TargetName="circle" Value="{StaticResource Expander.Disabled.Circle.Fill}"/> <Setter Property="Stroke" TargetName="arrow" Value="{StaticResource Expander.Disabled.Arrow.Stroke}"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="ExpanderHeaderFocusVisual"> <Setter Property="Control.Template"> <Setter.Value> <ControlTemplate> <Border> <Rectangle Margin="0" SnapsToDevicePixels="true" Stroke="Black" StrokeThickness="1" StrokeDashArray="1 2"/> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="ExpanderDownHeaderStyle" TargetType="{x:Type ToggleButton}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ToggleButton}"> <Border Padding="{TemplateBinding Padding}"> <Grid Background="Transparent" SnapsToDevicePixels="False"> <Grid.ColumnDefinitions> <ColumnDefinition Width="19"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Ellipse x:Name="circle" HorizontalAlignment="Center" Height="19" Stroke="{StaticResource Expander.Static.Circle.Stroke}" VerticalAlignment="Center" Width="19"> </Ellipse> <Path x:Name="arrow" Data="M 8 9 12 12 8 15" HorizontalAlignment="Center" SnapsToDevicePixels="false" Stroke="{StaticResource Expander.Static.Arrow.Stroke}" StrokeThickness="2" VerticalAlignment="Center" > </Path> <ContentPresenter Grid.Column="1" HorizontalAlignment="Left" Margin="4,0,0,0" RecognizesAccessKey="True" SnapsToDevicePixels="True" VerticalAlignment="Center"/> </Grid> </Border> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="true"> <Setter Property="Data" TargetName="arrow" Value="M -1,-4.5 L -4.5,-1 L -8,-4.5"/> <Setter Property="Margin" TargetName="arrow" Value="5,4,-4.8,-2.8"/> </Trigger> <Trigger Property="IsMouseOver" Value="true"> <Setter Property="Stroke" TargetName="circle" Value="{StaticResource Expander.MouseOver.Circle.Stroke}"/> <Setter Property="Fill" TargetName="circle" Value="{StaticResource Expander.MouseOver.Circle.Fill}"/> <Setter Property="Stroke" TargetName="arrow" Value="{StaticResource Expander.MouseOver.Arrow.Stroke}"/> </Trigger> <Trigger Property="IsPressed" Value="true"> <Setter Property="Stroke" TargetName="circle" Value="{StaticResource Expander.Pressed.Circle.Stroke}"/> <Setter Property="StrokeThickness" TargetName="circle" Value="1.5"/> <Setter Property="Fill" TargetName="circle" Value="{StaticResource Expander.Pressed.Circle.Fill}"/> <Setter Property="Stroke" TargetName="arrow" Value="{StaticResource Expander.Pressed.Arrow.Stroke}"/> </Trigger> <Trigger Property="IsEnabled" Value="false"> <Setter Property="Stroke" TargetName="circle" Value="{StaticResource Expander.Disabled.Circle.Stroke}"/> <Setter Property="Fill" TargetName="circle" Value="{StaticResource Expander.Disabled.Circle.Fill}"/> <Setter Property="Stroke" TargetName="arrow" Value="{StaticResource Expander.Disabled.Arrow.Stroke}"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="ExpanderStyle1" TargetType="{x:Type Expander}"> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> <Setter Property="Background" Value="Transparent"/> <Setter Property="HorizontalContentAlignment" Value="Stretch"/> <Setter Property="VerticalContentAlignment" Value="Stretch"/> <Setter Property="BorderBrush" Value="Transparent"/> <Setter Property="BorderThickness" Value="1"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Expander}"> <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="3" SnapsToDevicePixels="true"> <DockPanel> <ToggleButton x:Name="HeaderSite" ContentTemplate="{TemplateBinding HeaderTemplate}" ContentTemplateSelector="{TemplateBinding HeaderTemplateSelector}" Content="{TemplateBinding Header}" DockPanel.Dock="Top" Foreground="{TemplateBinding Foreground}" FontWeight="{TemplateBinding FontWeight}" FocusVisualStyle="{StaticResource ExpanderHeaderFocusVisual}" FontStyle="{TemplateBinding FontStyle}" FontStretch="{TemplateBinding FontStretch}" FontSize="{TemplateBinding FontSize}" FontFamily="{TemplateBinding FontFamily}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" IsChecked="{Binding IsExpanded, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" Margin="1" MinWidth="0" MinHeight="0" Padding="{TemplateBinding Padding}" Style="{StaticResource ExpanderDownHeaderStyle}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/> <ContentPresenter x:Name="ExpandSite" DockPanel.Dock="Bottom" Focusable="false" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" Visibility="Collapsed" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> </DockPanel> </Border> <ControlTemplate.Triggers> <Trigger Property="IsExpanded" Value="true"> <Setter Property="Visibility" TargetName="ExpandSite" Value="Visible"/> </Trigger> <Trigger Property="ExpandDirection" Value="Right"> <Setter Property="DockPanel.Dock" TargetName="ExpandSite" Value="Right"/> <Setter Property="DockPanel.Dock" TargetName="HeaderSite" Value="Left"/> <Setter Property="Style" TargetName="HeaderSite" Value="{StaticResource ExpanderRightHeaderStyle}"/> </Trigger> <Trigger Property="ExpandDirection" Value="Up"> <Setter Property="DockPanel.Dock" TargetName="ExpandSite" Value="Top"/> <Setter Property="DockPanel.Dock" TargetName="HeaderSite" Value="Bottom"/> <Setter Property="Style" TargetName="HeaderSite" Value="{StaticResource ExpanderUpHeaderStyle}"/> </Trigger> <Trigger Property="ExpandDirection" Value="Left"> <Setter Property="DockPanel.Dock" TargetName="ExpandSite" Value="Left"/> <Setter Property="DockPanel.Dock" TargetName="HeaderSite" Value="Right"/> <Setter Property="Style" TargetName="HeaderSite" Value="{StaticResource ExpanderLeftHeaderStyle}"/> </Trigger> <Trigger Property="IsEnabled" Value="false"> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style>
My problem is here :
(part 1-right facing arrow) <Path x:Name="arrow" Data="M 8 9 12 12 8 15" HorizontalAlignment="Center" SnapsToDevicePixels="false" Stroke="{StaticResource Expander.Static.Arrow.Stroke}" StrokeThickness="2" VerticalAlignment="Center" > </Path> <ContentPresenter Grid.Column="1" HorizontalAlignment="Left" Margin="4,0,0,0" RecognizesAccessKey="True" SnapsToDevicePixels="True" VerticalAlignment="Center"/> </Grid> </Border> (part 2-down facing arrow) <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="true"> <Setter Property="Data" TargetName="arrow" Value="M -1,-4.5 L -4.5,-1 L -8,-4.5"/> <Setter Property="Margin" TargetName="arrow" Value="5,4,-4.8,-2.8"/> </Trigger>
The code in part 2-down facing arrow works perfect . But in part-1 , i'm trying to make a right facing arrow.The path points in part 1 makes a right arrow however it's not the same size of the arrow in part 2 . Moreover,the code of part 1 changes the right arrow position,it doesn't stick to the position of the down arrow in part 2
image 1 : drive.google.com/open?id=1d4uGK8c1ixqOEHzbUc9m2OKb6XWflnMa
image 2 : drive.google.com/open?id=1hpIFIzKfg9LAroj4WJ_LvbJKWe33lTYf
image 3 : drive.google.com/open?id=1Ic02TEA4adAQmtNB9Nd7-8tlGh4t_K4s
Give your path a size, use stretch=fill and lose the margin on the trigger:
<Path x:Name="arrow" Stretch="Fill" Data="M 8 9 12 12 8 15" Height="8" Width="8" HorizontalAlignment="Center" VerticalAlignment="Center" SnapsToDevicePixels="false" Stroke="{StaticResource Expander.Static.Arrow.Stroke}" StrokeThickness="2" > </Path> <ContentPresenter Grid.Column="1" HorizontalAlignment="Left" Margin="4,0,0,0" RecognizesAccessKey="True" SnapsToDevicePixels="True" VerticalAlignment="Center"/> </Grid> </Border> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="true"> <Setter Property="Data" TargetName="arrow" Value="M -1,-4.5 L -4.5,-1 L -8,-4.5"/> </Trigger>
这篇关于自定义wpf扩展器控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!