【问题标题】:Removing the 'selection' from a radio button in a listview control从列表视图控件中的单选按钮中删除“选择”
【发布时间】:2015-06-30 00:30:43
【问题描述】:

这感觉就像解决方案很明显,但显然不是。

我的窗口上有一个列表视图,定义如下:

<ListView SelectedValue="{Binding Gender, ValidatesOnDataErrors=True}" Grid.Column="1" Grid.Row="3" SelectedValuePath="Tag" BorderThickness="0" Margin="2" SelectionMode="Single">
    <RadioButton GroupName="Gender" Margin="2" Tag="M" Content="Male" IsChecked="{Binding RelativeSource={RelativeSource AncestorType=ListViewItem}, Path=IsSelected}"/>
    <RadioButton GroupName="Gender" Margin="2" Tag="F" Content="Female" IsChecked="{Binding RelativeSource={RelativeSource AncestorType=ListViewItem}, Path=IsSelected}"/>
</ListView>

当其中一个单选按钮被选中时,它具有灰色背景和项目周围的边框。我想删除/隐藏背景和边框。我该怎么做?

我尝试将 Focusable 设置为 false。各种样式、模板、触发器等,但这些都没有效果。我尝试了this question 中的所有解决方案,但没有奏效。

我还能如何在列表视图项上删除此样式。基本上,当控件没有焦点时,我希望灰色背景和边框消失。

编辑:添加图片来说明我想要实现的目标。我希望删除/隐藏“男性”单选按钮周围的边框和背景。所以这就是我所拥有的:

这就是我想要的:

这是我认为应该起作用的(根据到目前为止的答案,但什么也没做。风格保持不变。)

<!-- This doesn't change the style... -->
<ListView.Resources>
    <Style TargetType="ListViewItem">
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="BorderBrush" Value="Transparent"/>
                <Setter Property="Background" Value="Transparent"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</ListView.Resources>

<!-- Neither does this... -->
<Style TargetType="{x:Type ListViewItem}">
    <Style.Triggers>
        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="IsSelected" Value="True"/>
                <Condition Property="IsFocused" Value="False"/>
            </MultiTrigger.Conditions>
            <MultiTrigger.Setters>
                <Setter Property="Foreground" Value="{x:Null}"/>
                <Setter Property="Background" Value="{x:Null}"/>
                <Setter Property="BorderBrush" Value="{x:Null}"/>                          
            </MultiTrigger.Setters>
        </MultiTrigger>
    </Style.Triggers>
</Style>

【问题讨论】:

    标签: c# wpf radio-button styling listviewitem


    【解决方案1】:

    你应该添加一个样式触发器:

                <Style TargetType="RadioButton">
                    <Style.Triggers>
                        <Trigger Property="IsChecked" Value="True">
                            <Setter Property="Background" Value="YOUR FAVORITE COLOR HERE" />
                            <Setter Property="BorderBrush" Value="YOUR FAVORITE COLOR HERE"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
    

    我参考了这个:www.wpf-tutorial.com/styles/trigger-datatrigger-event-trigger/
    这只是向您展示正确方法的示例!希望对你有帮助

    【讨论】:

    • 我要设置哪个元素的样式? RadioButtons 还是 ListViewItem?
    • 我已经编辑了我的答案,所以现在应该更清楚了
    • 我在使用该样式时出错。The name "Border" is not recognized。这也不能解决我的问题,只是将文本更改为蓝色。我将添加一张图片以进行澄清。
    • 我的代码只是一个指导方针,你需要做一些研究才能放入正确的属性。This is a list wpf 上单选按钮的所有属性。 PS:您正在寻找的是属性 BorderBrush。我已重新编辑我的答案以满足您的更多需求
    • 你能解释一下为什么我应该设置 RadioButton 而不是 ListViewItem 的样式吗?我原以为选择样式是 ListViewItem 类的一部分,而不是列表中的控件。 (如果这是有道理的)
    【解决方案2】:

    好的,我不知道我做了什么,但我在 this blog post: 中找到了调整 XAML 的答案

    我最终得到了这种风格,我不知道它做了什么,但它做了我想要它做的事情。

    我的 ListView 的完整 XAML 现在看起来像这样,稍后我会将样式移动到资源字典中。

    <ListView SelectedValue="{Binding Gender, ValidatesOnDataErrors=True}" Grid.Column="1" Grid.Row="3" SelectedValuePath="Tag" BorderThickness="0" Margin="2" SelectionMode="Single">
        <ListView.Resources>
            <Style TargetType="{x:Type ListViewItem}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListBoxItem}">
                            <Border x:Name="Bd"
                                    BorderBrush="{TemplateBinding BorderBrush}"
                                    BorderThickness="{TemplateBinding BorderThickness}"
                                    Background="{TemplateBinding Background}"
                                    Padding="{TemplateBinding Padding}"
                                    SnapsToDevicePixels="true">
                                <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                  SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                            </Border>
                            <ControlTemplate.Triggers>
                                <MultiTrigger>
                                    <MultiTrigger.Conditions>
                                        <Condition Property="Selector.IsSelectionActive"
                            Value="False" />
                                        <Condition Property="IsSelected"
                            Value="True" />
                                    </MultiTrigger.Conditions>
                                    <Setter Property="Background"
                    TargetName="Bd"
                    Value="Transparent" />
                                </MultiTrigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ListView.Resources>
        <RadioButton GroupName="Gender" Margin="2" Tag="M" Content="Male" IsChecked="{Binding RelativeSource={RelativeSource AncestorType=ListViewItem}, Path=IsSelected}"/>
        <RadioButton GroupName="Gender" Margin="2" Tag="F" Content="Female" IsChecked="{Binding RelativeSource={RelativeSource AncestorType=ListViewItem}, Path=IsSelected}"/>
    </ListView>
    

    【讨论】:

      猜你喜欢
      • 2018-09-19
      • 2016-06-17
      • 2013-04-12
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      相关资源
      最近更新 更多