web-dev-qa-db-ja.com

WPFのリストボックスアイテムを選択不可にする

WPFにリストボックスがあり、アイテムを選択すると、whenい色が表示されます。すべてのアイテムを選択不可にできますか?

56

選択する必要がない場合は、ItemsControlではなくListBoxを使用します

91
Thomas Levesque

ListBoxItemスタイルでFocusableプロパティをfalseとして追加します。

<Style x:Key="{x:Type ListBoxItem}" TargetType="{x:Type ListBoxItem}">
  <!-- Possibly other setters -->
  <Setter Property="Focusable" Value="False" />
</Style>
29
Vadym Kyrylkov

それらを選択可能にしたくない場合は、おそらくリストビューは必要ありません。しかし、これが本当に必要なものである場合、スタイルでそれを行うことができます:

<Page
  xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml">
  <Page.Resources>


<Style x:Key="{x:Type ListBoxItem}" TargetType="{x:Type ListBoxItem}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type ListBoxItem}">
        <Border 
          Name="Border"
          Padding="2"
          SnapsToDevicePixels="true">
          <ContentPresenter />
        </Border>
        <ControlTemplate.Triggers>
          <Trigger Property="IsSelected" Value="true">
            <Setter TargetName="Border" Property="Background" Value="#DDDDDD"/>
          </Trigger>
          <Trigger Property="IsEnabled" Value="false">
            <Setter Property="Foreground" Value="#888888"/>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

  </Page.Resources>
  <Grid>  
    <ListBox>
      <ListBoxItem>One</ListBoxItem>
      <ListBoxItem>Two</ListBoxItem>
      <ListBoxItem>Three</ListBoxItem>
    </ListBox>
  </Grid>
</Page>

IsSelectedトリガーを見てください。境界線を別の色にして、「Uい」ようにしたり、透明に設定したりして、選択したときに表示されないようにすることができます。

お役に立てれば。

14
4imble

これをリストボックス内で使用してください。この非常にエレガントなソリューションを見つけました

<ListBox ItemsSource="{Binding YourCollection}">
    <ListBox.ItemContainerStyle>
       <Style TargetType="{x:Type ListBoxItem}">
           <Setter Property="Focusable" Value="False"/>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>
13
Asad Durrani

さらに簡単な方法があります:set ListBox property IsHitTestVisible="False"。これにより、リスト内のすべてのアイテムがマウスイベントを受信できなくなります。これには、マウスオーバー時にも強調表示を停止できるという利点があります。

WP 7.1。

5
Denise Draper

これを行う簡単な方法(上記vikyの回答を使用)は、次のようにSelectionChanged()で選択したインデックスを-1に設定することです。

public void OnListView_SelectionChanged(Object sender, RoutedEventArgs e)
{
    if (null != sender && sender is ListView)
    {
        ListView lv = sender as ListView;
        lv.SelectedIndex = -1;
    }
}
3
tornacious

イベントを避ける方が良いのですが、よりエレガントで副作用のないStyleタグです。

<ListBox>
  <ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
      <Setter Property="IsEnabled" Value="False"/>
    </Style>
  </ListBox.ItemContainerStyle>
  <ListBox.ItemTemplate>
    <DataTemplate>
      <StackPanel>
        ... what you want as a source ...
       </StackPanel>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>
2
user1630939

listBoxのSelectionChangedイベントを処理し、イベントハンドラーで選択した項目の選択を解除できます。

1
viky

誰かがまだ選択できないListBoxItem(またはListViewItem)機能を必要としている場合。 http://thrash505.wordpress.com/2011/01/04/non-selectable-listboxitem-or-listviewitem-using-attached-properties/

1
Tim Valentine

私の場合、TextblockとComboBoxでテンプレート化されたListboxItemがありました。唯一の「アクティブ」はコンボ...

<ScrollViewer VerticalScrollBarVisibility="Auto"
              HorizontalScrollBarVisibility="Disabled"
              CanContentScroll="True" />
    <ItemsControl>
     ....here my content....
    </Itemscontrol>
</ScrollViewer>

期待どおりに機能しました。 BR、ダニエル

0
dba

無効なリストボックスを作成することもできます。これにより、静的で非対話的なリストボックスが提供されます。

<ListBox IsEnabled="False"/>

これは可能な限りシンプルなソリューションだと思います。

0
Lazys