내 WPF 응용 프로그램에서 ComboBox에 대한 사용자 지정 템플릿을 작성하고 있습니다. 이름 ShadowEffect
하지 않는 것을 인용,트리거를 사용하여 효과를 어떻게 대상으로합니까?
<ControlTemplate TargetType="{x:Type ComboBox}">
<Border x:Name="templateRoot"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="4" SnapsToDevicePixels="True">
<Grid SnapsToDevicePixels="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="0" MinWidth="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" />
</Grid.ColumnDefinitions>
<Border x:Name="Shadow"
Grid.Column="0" Grid.ColumnSpan="2"
Margin="-3"
Background="{DynamicResource L1Brush}">
<Border.Effect>
<DropShadowEffect x:Name="ShadowEffect"
BlurRadius="0" ShadowDepth="0" />
</Border.Effect>
</Border>
<!-- rest of the template -->
</Grid>
</Border>
<ControlTemplate.Triggers>
<!-- other triggers -->
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="ShadowEffect" Property="DropShadowEffect.BlurRadius" Value="5" />
</Trigger>
<Trigger Property="IsFocused" Value="True">
<Setter TargetName="ShadowEffect" Property="DropShadowEffect.BlurRadius" Value="5" />
</Trigger>
<!-- other triggers -->
</ControlTemplate.Triggers>
</ControlTemplate>
그러나 런타임에,이 오류가 발생합니다 : 위에 사용자가 마우스를 올리면, 그래서 나는이 코드를 작성하려고 할 때 나는 상승 - 그림자 효과를 달성하기 위해 콤보 상자를 원한다 있다. 이 작업을 어떻게 수행합니까? 그리고 내가 이것을 움직이기 원한다면 어떻게 스토리 보드에서 ShadowEffect
을 참조 할 수 있습니까?
나는 테두리의 전체 Effect
속성을 설정할 수 있다는 것을 알았지 만, 애니메이션을 추가하려고하면이 접근법이 떨어져 버립니다.
이것은 영리한 해결책입니다. 감사합니다. 그러나 한 가지 더 - ' <스토리 보드 Storyboard.TargetName = "ShadowEffect"> BeginStoryboard> Trigger.EnterActions>는 트릭을 수행하는 것처럼 보이지만 애니메이션이 고르지 않습니다. 왜? –
333
@ 333 DoubleAnimation IIRC에서 From과 To를 설정해야합니다. 그것이 제가 선호했을만한 해결책 이었지만 찾아 볼 시간이 없었습니다. 이제 나는 술집에서 나가고있다. –