问题描述
我遵循着awesome tutorial的有关自定义控件的内容,在播放列表的第四段视频中,肖恩(Sean)浏览了视觉状态。在他的AnalogClockStyle.xaml
中,他演示了控件网格内的一个简单的可视状态管理器,但是我可以想象,如果您只想分析控件模板,那么对于更复杂设计的自定义控件是不可行的。
是否可以将视觉状态管理器与控件模板的样式文件分开?理想情况下,我想为自定义控件*.cs
文件,控件模板*.xaml
文件,各自的样式*.xaml
文件以及最终的可视状态管理器文件(如果可能)创建文件夹。>
这是当前控件模板的样子:
<Style targettype="local:AnalogClock">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate targettype="local:AnalogClock">
<ControlTemplate.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
<converters:GreaterThanMultiConverter x:Key="GreaterThanMultiConverter"/>
<converters:DivisionConverter x:Key="DivisionConverter"/>
</ControlTemplate.Resources>
<Grid x:Name="Clock" RenderTransformOrigin="0.5 0.5">
<Grid.RenderTransform>
<RotateTransform Angle="90"/>
</Grid.RenderTransform>
<!-- Move the Visual State Manager code to a separate file? -->
<visualstatemanager.VisualStateGroups>
<VisualStateGroup x:Name="TimeStates">
<VisualState x:Name="Day">
<Storyboard>
<ColorAnimation Storyboard.TargetName="ClockFill"
Storyboard.TargetProperty="Color"
To="SkyBlue"/>
<ColorAnimation Storyboard.TargetName="Hourstroke"
Storyboard.TargetProperty="Color"
To="Gold"/>
<ColorAnimation Storyboard.TargetName="Minutestroke"
Storyboard.TargetProperty="Color"
To="Gold"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Night">
<Storyboard>
<ColorAnimation Storyboard.TargetName="ClockFill"
Storyboard.TargetProperty="Color"
To="Black"/>
<ColorAnimation Storyboard.TargetName="Hourstroke"
Storyboard.TargetProperty="Color"
To="White"/>
<ColorAnimation Storyboard.TargetName="Minutestroke"
Storyboard.TargetProperty="Color"
To="White"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Christmas">
<Storyboard>
<ColorAnimation Storyboard.TargetName="ClockFill"
Storyboard.TargetProperty="Color"
To="Green"/>
<ColorAnimation Storyboard.TargetName="Hourstroke"
Storyboard.TargetProperty="Color"
To="Red"/>
<ColorAnimation Storyboard.TargetName="Minutestroke"
Storyboard.TargetProperty="Color"
To="Red"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</visualstatemanager.VisualStateGroups>
<!-- Move the Visual State Manager code to a separate file? -->
<Ellipse x:Name="PART_Clock" stroke="Black" strokeThickness="1">
<Ellipse.Style>
<Style targettype="Ellipse">
<Setter Property="Width" Value="{Binding ActualHeight,ElementName=Clock}"/>
<Setter Property="Height" Value="auto"/>
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource GreaterThanMultiConverter}">
<MultiBinding.Bindings>
<Binding Path="ActualHeight" ElementName="Clock"/>
<Binding Path="ActualWidth" ElementName="Clock"/>
</MultiBinding.Bindings>
</MultiBinding>
</DataTrigger.Binding>
<DataTrigger.Setters>
<Setter Property="Height" Value="{Binding ActualWidth,ElementName=Clock}"/>
<Setter Property="Width" Value="auto"/>
</DataTrigger.Setters>
</DataTrigger>
</Style.Triggers>
</Style>
</Ellipse.Style>
<Ellipse.Fill>
<SolidColorBrush x:Name="ClockFill" Color="White"/>
</Ellipse.Fill>
</Ellipse>
<Line x:Name="PART_HourHand" strokeThickness="1" VerticalAlignment="Center" HorizontalAlignment="Center" X1="0"
X2="{Binding ActualHeight,ElementName=PART_Clock,Converter={StaticResource DivisionConverter},ConverterParameter=-4}">
<Line.stroke>
<SolidColorBrush x:Name="Hourstroke" Color="Black"/>
</Line.stroke>
</Line>
<Line x:Name="PART_MinuteHand" strokeThickness="1" VerticalAlignment="Center" HorizontalAlignment="Center" X1="0"
X2="{Binding ActualHeight,ConverterParameter=-2.5}">
<Line.stroke>
<SolidColorBrush x:Name="Minutestroke" Color="Black"/>
</Line.stroke>
</Line>
<Line x:Name="PART_SecondHand" Visibility="{TemplateBinding ShowSeconds,Converter={StaticResource BooleanToVisibilityConverter}}" stroke="Red" strokeThickness="1" VerticalAlignment="Center" HorizontalAlignment="Center" X1="0"
X2="{Binding ActualHeight,ConverterParameter=-2.5}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)