3

私はまだそれを取得しませんでした。ListBox のデフォルトの動作をオーバーライドする方法を正確に教えてください。ListBoxItem が選択されるたびに、Border の背景を変更する必要があります。行全体の背景ではなく、指定された境界線の背景のみ。

 <ListBox ItemsSource="{Binding Source={StaticResource AssetsViewSource}}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Border BorderThickness="2" BorderBrush="Black">
                    <StackPanel>
                        <TextBlock Text="Name: " />
                        <TextBlock Text="{Binding Name}" />
                    </StackPanel>
                </Border>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
4

2 に答える 2

11

DataTemplate の Triggers コレクションを RelativeSource と共に使用して、含まれている ListBoxItem にアクセスします。

<DataTemplate>
  <Border BorderThickness="2" BorderBrush="Black" Name="Bd">
    <StackPanel>
      <TextBlock Text="Name: " />
      <TextBlock Text="{Binding Name}" />
    </StackPanel>
  </Border>
  <DataTemplate.Triggers>
    <DataTrigger Value="True"
                 Binding="{Binding 
                              IsSelected, 
                              RelativeSource={RelativeSource 
                                  AncestorType={x:Type ListBoxItem}}}">
      <!-- everybody loves HotPink -->
      <Setter TargetName="Bd" Property="Background" Value="HotPink"/>  
    </DataTrigger>
  </DataTemplate.Triggers>
</DataTemplate>
于 2010-04-07T00:00:51.130 に答える
2

以下を ListBox Item タグに追加するだけです。

<ListBox.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
</ListBox.Resources>

それはトリックを行う必要があります..

于 2010-08-16T15:43:13.617 に答える