从列表视图控件中的单选按钮中删除 'selection'
Removing the 'selection' from a radio button in a listview control
感觉解决方案很明显,但显然不是。
我的 window 列表视图定义如下:
<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>
选中其中一个单选按钮后,它的背景和边框为灰色。我想要 remove/hide 背景和边框。我该怎么做?
我试过将 Focusable
设置为 false。各种样式、模板、触发器等,但这些都没有效果。我尝试了 this 问题的所有解决方案,但它们没有用。
我还能如何删除列表视图项目上的这种样式。基本上,当控件没有焦点时,我希望灰色背景和边框消失。
编辑:添加图片来说明我想要实现的目标。我想要 'Male' 单选按钮 removed/hidden 周围的边框和背景。这就是我所拥有的:
这就是我想要的:
这是我认为应该可行的(根据目前的答案,但什么也没做。样式保持不变。)
<!-- 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>
您应该添加样式触发器:
<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-教程。com/styles/trigger-datatrigger-event-trigger/
这只是向您展示正确方法的示例!希望对你有帮助
好的,我不知道我做了什么,但我在 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>
感觉解决方案很明显,但显然不是。
我的 window 列表视图定义如下:
<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>
选中其中一个单选按钮后,它的背景和边框为灰色。我想要 remove/hide 背景和边框。我该怎么做?
我试过将 Focusable
设置为 false。各种样式、模板、触发器等,但这些都没有效果。我尝试了 this 问题的所有解决方案,但它们没有用。
我还能如何删除列表视图项目上的这种样式。基本上,当控件没有焦点时,我希望灰色背景和边框消失。
编辑:添加图片来说明我想要实现的目标。我想要 'Male' 单选按钮 removed/hidden 周围的边框和背景。这就是我所拥有的:
这就是我想要的:
这是我认为应该可行的(根据目前的答案,但什么也没做。样式保持不变。)
<!-- 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>
您应该添加样式触发器:
<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-教程。com/styles/trigger-datatrigger-event-trigger/
这只是向您展示正确方法的示例!希望对你有帮助
好的,我不知道我做了什么,但我在 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>