2015-06-30 2 views
0

Такое ощущение, что решение будет очевидно, но, видимо, нет.Удаление «выбора» с помощью переключателя в элементе управления списком

У меня есть ListView на моем окне, определенный следующим образом:

<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 вопрос, но они не сработали.

Как еще я могу удалить этот стиль в элементах списка. В основном я хочу, чтобы серый фон и граница ушли, когда элемент управления не имеет фокуса.

EDIT: Добавление изображения, чтобы проиллюстрировать, чего я пытаюсь достичь. Я хочу, чтобы рамка и фон вокруг радиотелефона «Муж» были удалены/скрыты. Так это то, что у меня есть:

Part of my form

И это то, что я хочу:. Expected

Это то, что я думаю, что должно работать (в соответствии с ответами до сих пор, но ничего не делает стиль просто остается неизменным)

<!-- 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> 

ответ

0

Хорошо, я понятия не имею, что я сделал, но я нашел ответ мой настраивая XAML в this blog post:

Я закончил с этим стилем, я понятия не имею, что он делает , но он делает то, что я хочу, чтобы он делал.

Полный XAML для моего списка ListView теперь выглядит следующим образом: позже я переведу стиль в словарь ресурсов.

<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> 
0

Вы»должны добавить триггер стиль:.

  <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/
Это просто пример, чтобы показать вам правильный путь! Надеюсь, что это помогает

+0

Какой элемент у меня стиль? RadioButtons или ListViewItem? – Jake

+0

Радиокнопки – Gino

+0

Я отредактировал свой ответ, так что теперь он должен быть более ясным. – Gino

Смежные вопросы