【问题标题】:WPF radio button icon change (the circle itself)WPF单选按钮图标更改(圆圈本身)
【发布时间】:2019-02-12 14:09:56
【问题描述】:

我想要一组单选按钮,将未选中和选中模式的圆圈更改为我设计的圆圈图标。

在 WPF 中可以做到这一点吗? 提前致谢

【问题讨论】:

    标签: wpf radio-button


    【解决方案1】:

    创建一个样式并覆盖 RadioButtons 的默认模板。像这样的:

    <Window.Resources>
        <Style TargetType="RadioButton">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type RadioButton}">
                        <BulletDecorator Background="Transparent">
                            <BulletDecorator.Bullet>
                                <Grid Width="13" Height="13">
                                    <Ellipse x:Name="Border" StrokeThickness="2">
                                        <Ellipse.Stroke>
                                            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                                <GradientStop Color="Green" Offset="0" />
                                                <GradientStop Color="Pink" Offset="1" />
                                            </LinearGradientBrush>
                                        </Ellipse.Stroke>
                                        <Ellipse.Fill>
                                            <LinearGradientBrush StartPoint="0,0"
                                       EndPoint="0,1">
                                                <LinearGradientBrush.GradientStops>
                                                    <GradientStopCollection>
                                                        <GradientStop Color="Orange" />
                                                        <GradientStop Color="Red"
                                      Offset="1.0" />
                                                    </GradientStopCollection>
                                                </LinearGradientBrush.GradientStops>
                                            </LinearGradientBrush>
                                        </Ellipse.Fill>
                                    </Ellipse>
                                    <Ellipse x:Name="CheckMark"
                       Margin="4"
                       Visibility="Collapsed">
                                        <Ellipse.Fill>
                                            <SolidColorBrush Color="Purple" />
                                        </Ellipse.Fill>
                                    </Ellipse>
                                </Grid>
                            </BulletDecorator.Bullet>
                          <ContentPresenter Margin="4,0,0,0"
                            VerticalAlignment="Center"
                            HorizontalAlignment="Left"
                            RecognizesAccessKey="True" />
                        </BulletDecorator>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>
    

    【讨论】:

    • 谢谢。但是,虽然这种风格改变了广播风格,但它删除了文本。另外,如何放置图像而不是形状或新颜色,以及如何区分已选中的样式和未选中的样式?
    • 是的,对于文本,您还需要从原始模板添加 ContentPresenter 部分(编辑上面的代码)。对于图像,您可能需要将 Ellipse 替换为 Image。
    • 太棒了!这正是我所需要的。谢谢:)
    【解决方案2】:

    是的,当然,这是可能的。您可以覆盖默认的 ControlTemplate 并为您自己的单选按钮创建样式。 Here是一个例子,你也可以使用Style Snooper查看WPF内置的单选按钮样式(一大段XAML代码:)

    【讨论】:

    • 非常感谢:)。如何将模板覆盖为图像而不是形状?如何区分选中样式和未选中样式?
    • 这不是一行代码,请查看上面的示例。使用视觉状态和触发器处理选定和未选定状态
    猜你喜欢
    • 2020-08-20
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 2013-02-14
    • 2012-08-15
    • 2020-05-22
    • 1970-01-01
    • 2020-10-10
    相关资源
    最近更新 更多