dayone
1
안녕하세요.
WPF로 데스크탑 앱을 개발하고 있습니다.
ListView를 ItemContainerStyle 를 이용하여 디자인하고 몇 가지 트리거를 걸었는데요.
IsSelect나 IsMouseOver 등을 통해 특정 아이템을 다르게 디자인하는게 가능하지만
DataTrigger를 이용하여 특정 아이템만 다르게 설정하는 방법을 모르겠네요…
예를 들어
bool IsImpact;
라는 데이터 바인딩 변수가 있고 이 변수가 true가 되면 특정 아이템의 텍스트 컬러를 변경이 가능할까요 ?
전체 적용은 가능한데 IsSelect 같이 특정 조건과 맞물리지 않으면 개별 적용이 안되는거 같아서요,
말을 제대로 적은건지 모르겠네요.
읽어주셔서 감사합니다!!
답변 주시면 더욱 감사합니다~
1 Like
dimohy
2
다양한 처리 방법이 있지만 ItemTemplateSelector
를 이용하는 것이 원하시는 목적에 부합할 것 같습니다.
아래 링크를 참조해보세요!
4 Likes
dayone
3
오 답변 감사합니다! 제가 찾던게 이건거 같아요!!
2 Likes
사족을 좀 더 달아보자면욤.
말씀하신 상황상 DataTrigger 동작이 정상 적용 되어야 하지만, 만약 여러 Trigger 가 나열되어 있다면
다른 Trigger 의 동작에 의해 Setter 동작이 덮어질 수 있어요.
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Yellow" />
</Trigger>
<DataTrigger Binding="{Binding IsSelect}" Value="True">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
</Style.Triggers>
요 동작과 두 Trigger 의 순서를 바꾼
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelect}" Value="True">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Yellow" />
</Trigger>
</Style.Triggers>
요 Trigger 설정은 동작이 달라요.
만약 IsSelect 가 정상적으로 들어왔다고 하더라도 여러 Trigger 의 설정에 의해
동작 하지 않거나 오동작 하는 것처럼 보일 수 있습니다.
그래서 Trigger 설정은 조심해서 해야하죠.
이럴 때 @dimohy 님이 말씀해주신 TemplateSelector 가 답이 될 수 있습니다. ~ㅁ~b
4 Likes