0

ItemContainerStyle プロパティにアタッチされた ResourceDictionary スタイルを使用してアイテムのスタイルを設定するリストボックスがあります。これにより、ListBoxItems の BorderThickness が 1 としましょう。

項目を個別に折りたたみたいので、Visibility.Collapsed を使用しますが、何らかの理由で、ItemContainerStyle が作成した境界線が残りのリスト ボックス項目と共に消えません。アイテムの背後にレイヤーが作成されたかのように見えますが、アイテムが折りたたまれていてもこれは残ります。

実行時に ListBoxItem (またはこの追加レイヤー) の BorderThickness を 0 に設定するにはどうすればよいですか?

よろしくsk

4

3 に答える 3

0

問題を再現しようとしましたが、境界線期待どおりに崩壊することがわかりました。

<StackPanel>
  <StackPanel.Resources>
    <BooleanToVisibilityConverter x:Key="BooleanToVisibility" />
    <Style x:Key="ListBoxItemStyle" TargetType="ListBoxItem">
      <Setter Property="BorderBrush" Value="Black" />
      <Setter Property="BorderThickness" Value="1" />
    </Style>
  </StackPanel.Resources>

  <CheckBox x:Name="_show"
            Content="Show Item 2"
            IsChecked="True" />

  <ListBox ItemContainerStyle="{StaticResource ListBoxItemStyle}">
    <ListBoxItem Content="Item 1" />
    <ListBoxItem Content="Item 2">
      <ListBoxItem.Visibility>
        <Binding ElementName="_show"
                 Path="IsChecked"
                 Converter="{StaticResource BooleanToVisibility}" />
      </ListBoxItem.Visibility>
    </ListBoxItem>
    <ListBoxItem Content="Item 3" />
  </ListBox>
</StackPanel>

ListBoxItemが(ListBoxItemのUIオブジェクトではなく)折りたたまれているオブジェクトであると確信していますか?

于 2011-02-13T16:53:29.973 に答える
0

カスタムトリガーを使用してみてください。

    <Style TargetType="{x:Type ListBoxItem}">
        <Style.Triggers>
            <Trigger Property="Visibility" Value="Collapsed">
                <Setter Property="BorderThickness" Value="0,0,0,0"/>
            </Trigger>
            <Trigger Property="Visibility" Value="Visible">
                <Setter Property="BorderThickness" Value="0,0,0,1"/>
            </Trigger>
        </Style.Triggers>
    </Style>

明らかに境界線の太さの値を変更しますが、これでうまくいくはずです(またはこれに非常に近いもの)

于 2009-10-26T14:11:23.453 に答える
-1
foreach(ListBoxItem item in listBox1.Items){
   item.BorderThickness = new Thickness(0);
}

これが答えですが、スタイルを元に戻して元のものに戻すことはできないため、特定の状態に基づいてデータバインディングを使用する別のアプローチを選択する必要があるため、お勧めしません。

于 2009-10-10T11:22:08.530 に答える