是否可以在WPF中设置BulletDecorator的样式?

lzfw57am  于 2023-06-07  发布在  其他
关注(0)|答案(3)|浏览(113)

显然,它可以有一个样式应用于它-什么我试图找出是否有可能定义的Bullet元素内的样式,所以你不必保持定义它一遍又一遍在XAML

<BulletDecorator>
       <BulletDecorator.Bullet>
            ...my bullet UIElement here...
        </BulletDecorator.Bullet>
        <TextBlock>
            ... my text here...
        </TextBlock>
</BulletDecorator>
4nkexdtk

4nkexdtk1#

BulletDecorator。无法对Bullet设置样式,并且BulletDecorator不是Control,因此无法对其进行模板化。
但是,您可以通过为ContentControl定义ControlTemplate来获得纯XAML的效果,如下所示:

<ControlTemplate x:Key="BulletTemplate" TargetType="{x:Type ContentControl}">
  <BulletDecorator>
    <BulletDecorator.Bullet>
      ...my bullet UIElement here...
    </BulletDecorator.Bullet>
    <ContentPresenter />
  </BulletDecorator>
</ControlTemplate>

现在你可以这样使用它:

<ContentControl Template="{StaticResource BulletTemplate}">
  <TextBlock />
</ContentControl>

如果你只使用几次,“<ContentControl Template=...”技术可以很好地工作。如果你想更频繁地使用它,你可以定义一个MyBullet类:

public class MyBullet : ContentControl
{
  static MyBullet()
  {
    DefaultStyleKeyProperty.OverrideMetadata(typeof(MyBullet), new FrameworkPropertyMetadata(typeof(MyBullet));
  }
}

然后将你的ControlTemplate移到Theme/Generic.xaml(或者合并到其中的字典),并使用以下内容 Package 它:

<Style TargetType="{x:Type local:MyBullet}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate
        ...
    </Setter.Value>
  </Setter>
</Style>

如果你这样做,你可以用途:

<local:MyBullet>
  <TextBox />
</local:MyBullet>

在你的应用程序中的任何地方。

nfeuvbwi

nfeuvbwi2#

项目符号不是依赖项属性,因此无法设置样式。
但是你当然可以声明你自己的类,这些类派生自Decorator并在构造函数中设置Bullet,所以你可以这样写:

<local:MyDecorator>
  <TextBlock />
</local:MyDecorator>
0dxa2lsx

0dxa2lsx3#

我一直在寻找一个更简单的解决方案来单独设计单选按钮的bulletdecorator,并希望在这里展示我的解决方案,因为我还没有找到任何好的例子。

<ControlTemplate TargetType="{x:Type RadioButton}" x:Key="RadioButtonControlTemplate">
    <BulletDecorator Background="Transparent" Cursor="Hand">
        <BulletDecorator.Bullet>
            <Grid Height="15" Width="15">
                <Ellipse x:Name="OffStyle" Margin="2" Fill="{DynamicResource RadioButtonOff}" Visibility="Visible" />
                <Ellipse x:Name="OnStyle" Margin="2" Fill="{DynamicResource RadioButtonOn}" Visibility="Hidden" />
            </Grid>
        </BulletDecorator.Bullet>
    </BulletDecorator>
    <ControlTemplate.Triggers>
        <Trigger Property="IsChecked" Value="true">
            <Setter TargetName="OnStyle" Property="Visibility" Value="Visible"/>
            <Setter TargetName="OffStyle" Property="Visibility" Value="Hidden" />
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

你可以这样用

<Viewbox Grid.Row="1" Height="50" Width="50">
   <RadioButton GroupName="RadioButtonGroup" HorizontalAlignment="Center" Template="{StaticResource RadioButtonControlTemplate}" />
</Viewbox>

我还添加了一个单选按钮关闭或打开时的样式

<DrawingBrush x:Key="RadioButtonOff" Stretch="Uniform">
    <DrawingBrush.Drawing>
        <DrawingGroup>
            <DrawingGroup.Children>
                <GeometryDrawing Geometry="F1 M 224,3.79999C 345.889,3.79999 444.7,102.611 444.7,224.5C 444.7,346.389 345.889,445.2 224,445.2C 102.111,445.2 3.30006,346.389 3.30006,224.5C 3.30006,102.611 102.111,3.79999 224,3.79999 Z ">
                    <GeometryDrawing.Pen>
                        <Pen Thickness="3.312" LineJoin="Round" Brush="#FF5C5C5C"/>
                    </GeometryDrawing.Pen>
                    <GeometryDrawing.Brush>
                        <RadialGradientBrush RadiusX="1.67044" RadiusY="1.67044" Center="0.5,0.5" GradientOrigin="0.5,0.5">
                            <RadialGradientBrush.GradientStops>
                                <GradientStop Color="#FFB9C3C6" Offset="0.253054"/>
                                <GradientStop Color="#FF5C6163" Offset="0.286441"/>
                                <GradientStop Color="#FF000000" Offset="0.329843"/>
                            </RadialGradientBrush.GradientStops>
                            <RadialGradientBrush.RelativeTransform>
                                <TransformGroup/>
                            </RadialGradientBrush.RelativeTransform>
                        </RadialGradientBrush>
                    </GeometryDrawing.Brush>
                </GeometryDrawing>
                <GeometryDrawing Geometry="F1 M 224.333,34.5277C 328.991,34.5277 413.833,119.37 413.833,224.028C 413.833,328.685 328.991,413.527 224.333,413.527C 119.675,413.527 34.8332,328.685 34.8332,224.028C 34.8332,119.37 119.675,34.5277 224.333,34.5277 Z ">
                    <GeometryDrawing.Pen>
                        <Pen Thickness="1.44" LineJoin="Round" Brush="#FF545454"/>
                    </GeometryDrawing.Pen>
                    <GeometryDrawing.Brush>
                        <RadialGradientBrush RadiusX="0.958628" RadiusY="0.958628" Center="0.232275,0.223043" GradientOrigin="0.232275,0.223043">
                            <RadialGradientBrush.GradientStops>
                                <GradientStop Color="#FFE5EEF0" Offset="0.150862"/>
                                <GradientStop Color="#FF72797B" Offset="0.5"/>
                                <GradientStop Color="#FF000406" Offset="0.909483"/>
                            </RadialGradientBrush.GradientStops>
                            <RadialGradientBrush.RelativeTransform>
                                <TransformGroup/>
                            </RadialGradientBrush.RelativeTransform>
                        </RadialGradientBrush>
                    </GeometryDrawing.Brush>
                </GeometryDrawing>
            </DrawingGroup.Children>
        </DrawingGroup>
    </DrawingBrush.Drawing>
</DrawingBrush>
<DrawingBrush x:Key="RadioButtonOn" Stretch="Uniform">
    <DrawingBrush.Drawing>
        <DrawingGroup>
            <DrawingGroup.Children>
                <GeometryDrawing Geometry="F1 M 224.3,4C 346.189,4 445,102.811 445,224.7C 445,346.589 346.189,445.4 224.3,445.4C 102.411,445.4 3.60013,346.589 3.60013,224.7C 3.60013,102.811 102.411,4 224.3,4 Z ">
                    <GeometryDrawing.Pen>
                        <Pen Thickness="3.312" LineJoin="Round" Brush="#FF5C5C5C"/>
                    </GeometryDrawing.Pen>
                    <GeometryDrawing.Brush>
                        <RadialGradientBrush RadiusX="1.67044" RadiusY="1.67044" Center="0.5,0.5" GradientOrigin="0.5,0.5">
                            <RadialGradientBrush.GradientStops>
                                <GradientStop Color="#FFB9C3C6" Offset="0.253054"/>
                                <GradientStop Color="#FF5C8A99" Offset="0.286441"/>
                                <GradientStop Color="#FF00516A" Offset="0.329843"/>
                            </RadialGradientBrush.GradientStops>
                            <RadialGradientBrush.RelativeTransform>
                                <TransformGroup/>
                            </RadialGradientBrush.RelativeTransform>
                        </RadialGradientBrush>
                    </GeometryDrawing.Brush>
                </GeometryDrawing>
                <GeometryDrawing Geometry="F1 M 224.633,34.7277C 329.291,34.7277 414.133,119.57 414.133,224.228C 414.133,328.885 329.291,413.727 224.633,413.727C 119.975,413.727 35.1333,328.885 35.1333,224.228C 35.1333,119.57 119.975,34.7277 224.633,34.7277 Z ">
                    <GeometryDrawing.Pen>
                        <Pen Thickness="1.44" LineJoin="Round" Brush="#FF545454"/>
                    </GeometryDrawing.Pen>
                    <GeometryDrawing.Brush>
                        <RadialGradientBrush RadiusX="0.958628" RadiusY="0.958628" Center="0.232275,0.223043" GradientOrigin="0.232275,0.223043">
                            <RadialGradientBrush.GradientStops>
                                <GradientStop Color="#FFE5EEF0" Offset="0.150862"/>
                                <GradientStop Color="#FF729FAE" Offset="0.5"/>
                                <GradientStop Color="#FF00516A" Offset="0.909483"/>
                            </RadialGradientBrush.GradientStops>
                            <RadialGradientBrush.RelativeTransform>
                                <TransformGroup/>
                            </RadialGradientBrush.RelativeTransform>
                        </RadialGradientBrush>
                    </GeometryDrawing.Brush>
                </GeometryDrawing>
            </DrawingGroup.Children>
        </DrawingGroup>
    </DrawingBrush.Drawing>
</DrawingBrush>

result

相关问题