WPF의 목록 상자 항목을 선택할 수 없도록 설정
WPF에 리스트 박스가 있는데 아이템을 선택하면 보기 흉한 색상이 나타납니다.모든 아이템을 선택 불가로 할 수 있습니까?
선택이 필요 없는 경우,ItemsControl
가 아니라ListBox
ListBoxItem 스타일에 Focusable 속성을 false로 추가합니다.
<Style x:Key="{x:Type ListBoxItem}" TargetType="{x:Type ListBoxItem}">
<!-- Possibly other setters -->
<Setter Property="Focusable" Value="False" />
</Style>
이것을 리스트 박스내에서 사용해 주세요.나는 이 매우 우아한 해결책을 발견했다.
<ListBox ItemsSource="{Binding YourCollection}">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Focusable" Value="False"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
선택할 수 없는 경우 목록 보기를 원하지 않을 수 있습니다.그러나 이것이 정말로 필요한 것이라면, 스타일링으로 할 수 있습니다.
<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 트리거를 확인합니다.테두리를 다른 색으로 만들어 "Ugly"가 되지 않도록 하거나 투명하게 설정할 수 있으며, 선택하면 테두리가 표시되지 않습니다.
이게 도움이 됐으면 좋겠다.
더 쉬운 방법이 있습니다. 세트ListBox
소유물IsHitTestVisible="False"
이렇게 하면 목록의 모든 항목이 마우스 이벤트를 수신할 수 없습니다.이렇게 하면 마우스를 위로 가져가도 강조 표시가 중지된다는 장점이 있습니다.
WP 7.1에서는 동작합니다.
이를 위한 간단한 방법(위 viky의 답변 사용)은 다음과 같이 Selection Changed()에서 선택한 인덱스를 -1로 설정하는 것입니다.
public void OnListView_SelectionChanged(Object sender, RoutedEventArgs e)
{
if (null != sender && sender is ListView)
{
ListView lv = sender as ListView;
lv.SelectedIndex = -1;
}
}
이벤트를 피하는 것이 보다 우아하고 스타일 태그의 부작용이 없습니다.
<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>
ListBox의 SelectionChanged 이벤트를 처리하고 이벤트 핸들러에서 선택한 항목을 선택 해제할 수 있습니다.
Listbox를 비활성화할 수도 있습니다.이것에 의해, 스태틱하고 인터랙티브하지 않은 리스트 박스가 표시됩니다.
<ListBox IsEnabled="False"/>
저는 이것이 가능한 한 간단한 해결책이라고 생각합니다.
저는 텍스트 블록과 콤보 박스로 리스트 박스 아이템을 템플릿으로 만들었습니다.유일한 "액티브"는 콤보...
<ScrollViewer VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
CanContentScroll="True" />
<ItemsControl>
....here my content....
</Itemscontrol>
</ScrollViewer>
기대했던 대로 효과가 있었어요.BR, 다니엘
미리보기를 처리할 수도 있습니다.마우스 다운 이벤트
그리고 탭 방지를 위해KeyboardNavigation.TabNavigation="None"
<ListView x:Name="Cards"
.....
PreviewMouseDown="CardMonthsDescriptors_OnPreviewMouseDown"
KeyboardNavigation.TabNavigation="None"
>
...
private void Cards_OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
}
언급URL : https://stackoverflow.com/questions/1722456/make-listbox-items-in-wpf-not-selectable
'bestsource' 카테고리의 다른 글
Swift에서 UserDefaults를 사용하려면 어떻게 해야 합니까? (0) | 2023.04.14 |
---|---|
문자열을 날짜 시간으로 변환 (0) | 2023.04.09 |
의미 문제: 자산의 합성된 getter는 '소유' 객체를 반환하기 위한 코코아 명명 규칙을 따릅니다. (0) | 2023.04.09 |
VBA(Excel) 오류의 적절한 처리 (0) | 2023.04.09 |
WPF 라운드 코너 컨테이너를 작성하려면 어떻게 해야 합니까? (0) | 2023.04.09 |