MVVM
프레임 워크를 사용하지 않고 WPF
으로 애플리케이션을 개발했습니다. 이제이 응용 프로그램은 점점 더 커지고 있습니다. 따라서 Caliburn.Micro
으로 전환하고 싶지만 이로 인해 문제가 발생합니다.RelativeSource 템플릿이있는 Caliburn.Micro DataTriggerParent
ItemsControl
안에 ListBoxes
이 포함 된보기가 있습니다. ListBoxItems
은 사용자가 ListBox
부모를 가리키면 불투명도를 변경해야하고 사용자가 Button
(마우스가 다시이 컨트롤을 벗어날 때) 주위를 가리키면 불투명도를 변경해야하는 버튼입니다. 이를 위해,이 xaml
코드를 내놓았다 : 나는 Caliburn로 전환 한 후
<Style x:Key="DeleteButtonStyle" TargetType="Button">
<Setter Property="Opacity" Value="0.0" />
<Style.Triggers>
<EventTrigger RoutedEvent="Control.MouseEnter">
<RemoveStoryboard BeginStoryboardName="PartiallyFadeOutStoryboard" />
<RemoveStoryboard BeginStoryboardName="FadeOutStoryboard" />
<BeginStoryboard Storyboard="{StaticResource FadeInStoryboard}" x:Name="FadeInStoryboard"/>
</EventTrigger>
<EventTrigger RoutedEvent="Control.MouseLeave">
<RemoveStoryboard BeginStoryboardName="PartiallyFadeInStoryboard" />
<RemoveStoryboard BeginStoryboardName="FadeInStoryboard" />
<BeginStoryboard Storyboard="{StaticResource PartiallyFadeOutStoryboard}" x:Name="PartiallyFadeOutStoryboard"/>
</EventTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsMouseOver, NotifyOnSourceUpdated=True}" Value="True">
<DataTrigger.EnterActions>
<RemoveStoryboard BeginStoryboardName="PartiallyFadeOutStoryboard" />
<RemoveStoryboard BeginStoryboardName="FadeOutStoryboard" />
<BeginStoryboard Storyboard="{StaticResource PartiallyFadeInStoryboard}" x:Name="PartiallyFadeInStoryboard"/>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="PartiallyFadeInStoryboard" />
<RemoveStoryboard BeginStoryboardName="FadeInStoryboard" />
<RemoveStoryboard BeginStoryboardName="PartiallyFadeOutStoryboard" />
<BeginStoryboard Storyboard="{StaticResource FadeOutStoryboard}" x:Name="FadeOutStoryboard"/>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
슬프게도,이 더 이상 실행되지 않습니다 마지막 DataTrigger
의 코드로, 이제 더 이상 작동하지 않습니다. 이 동작의 이유는 이전에 DataTemplate
을 ItemsControl
내부에서 사용하여 뷰를 정의한 것입니다. 하지만 ItemsControl
(ListBox
포함)에 바인딩 된이 항목의보기 용으로 추가 .xaml
파일/클래스를 만들었으므로 RelativeSource TemplatedParent
이 더 이상 작동하지 않을 수 있습니다. 이 아이디어가 맞습니까? 가장 우아한 방법으로이 문제를 어떻게 해결할 수 있습니까?
현재 작동 중입니다. 그러나 : 나는 다른 버튼 (동일한 상황에서 한 번, 다른 ItemsControl에서 한 번)에 동일한 스타일을 사용하고 있기 때문에 항상 공통 조상 유형이있는 것은 아닙니다. 그것에 대해 어떤 생각? – FlashTek
다른 질문입니다. 그러나 공통 조상 유형이없는 경우 두 가지 다른 트리거/다른 스타일을 정의해야합니다. 어떻게 든 데이터 트리거의 바인딩을 동적으로 변경할 수 없습니다. – mm8