【发布时间】:2011-07-28 19:33:13
【问题描述】:
我正在处理一个最初由其他人创建的项目,他们有一个 xaml 资源字典,其中包含整个解决方案中使用的所有按钮样式。
我正在修改解决方案中的一个窗口,它确实有助于我了解哪些按钮看起来像什么,所以我知道哪些可以在其他地方工作,所以我可以清理适合我的新按钮的样式尝试制作。
我的问题是有超过 30 种不同的按钮样式可供查看。
是否有人知道预览将样式应用于其 targetType 的结果的好方法?它不需要很简单,只要在具体情况下尽可能简单即可。
注意我尝试了 Expression,我没有在其中看到任何选项,但我还没有真正尝试过它。
我现在能想到的最好的事情是创建一个只包含一个按钮的空白窗口,然后我输入我想要查看的样式,然后我一直浏览直到找到我想要的。谁有更好的系统?
我在下面包含了一个样式示例,以防它有帮助,但看起来它本身有很多依赖项。我只在 Silverlight 的第 2 个月,所以通过下面的 30+ 有点令人生畏。
<Style TargetType="Button" x:Key="RightButtonBarButtonStyle">
<Setter Property="Padding" Value="15,0,15,0" />
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontFamily" Value="Segoie"/>
<Setter Property="FontSize" Value="13"/>
<Setter Property="Padding" Value="3"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush">
<Setter.Value>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFA3AEB9" Offset="0"/>
<GradientStop Color="#FF8399A9" Offset="0.375"/>
<GradientStop Color="#FF718597" Offset="0.375"/>
<GradientStop Color="#FF617584" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid x:Name="grid" RenderTransformOrigin="0.5,0.5" Height="25">
<Grid.RenderTransform>
<CompositeTransform/>
</Grid.RenderTransform>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0:0:0.2">
<VisualTransition.GeneratedEasingFunction>
<CubicEase EasingMode="EaseOut"/>
</VisualTransition.GeneratedEasingFunction>
</VisualTransition>
</VisualStateGroup.Transitions>
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimation Duration="0" To="0.7" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="grid" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<DoubleAnimation Duration="0" To="0.98" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" Storyboard.TargetName="grid" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="0.98" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="grid" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="DisabledVisualElement" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled">
<Storyboard>
<DoubleAnimation Duration="0" To="0.5" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="DisabledVisualElement"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="FocusStates">
<VisualState x:Name="Focused"/>
<VisualState x:Name="Unfocused"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border x:Name="border" BorderBrush="{StaticResource CoreButtonBorderBrush}" BorderThickness="0,1,1,1" CornerRadius="0,15,15,0" Background="{StaticResource CoreButtonBackgroundBrush}"/>
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="10,0,10,0" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
<Border BorderBrush="Black" BorderThickness="0" Height="1" Margin="11,1,11,0" VerticalAlignment="Top" Background="{StaticResource CoreButtonTopLineBrush}"/>
<Border BorderBrush="Black" BorderThickness="0" Height="1" Margin="12,0,13,-1" Background="{StaticResource CoreButtonBottomLineBrush}" VerticalAlignment="Bottom" Opacity="0.5"/>
<Border x:Name="DisabledVisualElement" Background="Black" IsHitTestVisible="false" Opacity="0" CornerRadius="0,15,15,0" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
编辑 看来我太快忽略了Expression。默认情况下(无论如何我都假设默认)程序右侧有一个资源选项卡(在属性和数据旁边)。如果它没有打开,您可以转到菜单并选择 Window->Resources。
从那里显示按 xaml 文件分组的所有资源,要预览样式的外观,请按相应名称右侧的按钮。只有一种按钮类型没有正确显示(声称有重复的键名,不明白为什么会阻止预览但确实如此,所以我猜其他并发症会导致类似的结果)。
我目前正在查看 VS2010 是否可以找到类似的功能,但我目前怀疑是否存在,因为这似乎更像是一种表达方式。
因此,如果有人知道 Visual Studio 2010 中存在的功能,请告诉我,因为这将使我不必在开始编辑后在项目之间跳转和刷新项目。如果可以的话,我也想避免购买 Expression。
【问题讨论】:
标签: silverlight xaml styles preview