试着学习一些关于s的东西,我被困在一个特定的主题上。我希望我的按钮使用我预先制作的样式进行大小和对齐编辑。一个例子:
<Button Style="{StaticResource ButtonFormat}">
</Button>
按钮的样式保存在App.Xaml中,样式的编写如下:
<Application.Resources>
<Style TargetType="Button" x:Key="ButtonFormat">
<Setter Property="Background" Value="#FF6E1400" />
<Setter Property="Margin" Value="5,5,5,5" />
</Style>
<Application.Resources>
现在,这是我的困境:
我想加载另一种覆盖“ButtomFormat”的样式。我一直试图在VisualStatemanager中尝试尝试提出正确的方法来做到这一点,但实际上找不到任何足以解释我如何做的事情。
所以在视觉状态如下:
<VisualState x:Name="BigView" >
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="550" />
</VisualState.StateTriggers>
<VisualState.Setters>
<!--stuff goes here-->
<!--stuff goes here-->
</VisualState.Setters>
</VisualState>
我想用ButtonFormatBlue覆盖ButtonFormat:
<Style TargetType="Button" x:Key="ButtonFormatBlue ">
<Setter Property="Background" Value="Blue" />
<Setter Property="Margin" Value="5,5,5,5" />
</Style>
我看到有人建议使用C#而不是visualstatemanagers,但我没有正确理解该描述,是否可以按照我想要的方式从visualstatetrigger加载它,或者我是否正在查看错误的方向?
所有的艾滋病都很感激,谢谢你们!
答案 0 :(得分:1)
您无法覆盖资源,但可以更改Button的样式属性。
首先必须给按钮命名:
Sub Insert_Molecules()
Dim Molecules() As Integer
Dim m As Integer, n As Integer
Dim i As Integer, j As Integer
m = 10
n = 10
ReDim Molecules(1 To m, 1 To n) As Integer
For i = 1 To m
For j = 1 To n
Cells(i, j).Interior.Color = RGB(255, 0, 0)
Next j
Next i
End Sub
现在您可以使用Molecules(i * Rnd, j * Rnd) = Cells(i, j).Interior.Color = RGB(255, 0, 0)
更改 <Button x:Name="MyButton" Style="{StaticResource ButtonFormat}">
</Button>
属性:
VisualStateManager
答案 1 :(得分:0)
我看到有人建议使用C#而不是visualstatemanagers,但我没有正确理解该描述。
这意味着您可以在后面的代码中手动设置Button
的样式。例如,您可以将ButtonFormat
和ButtonFormatBlue
都放在App资源中,如下所示:
<Application.Resources>
<Style TargetType="Button" x:Key="ButtonFormat">
<Setter Property="Background" Value="#FF6E1400" />
<Setter Property="Margin" Value="5,5,5,5" />
</Style>
<Style TargetType="Button" x:Key="ButtonFormatBlue">
<Setter Property="Background" Value="Blue" />
<Setter Property="Margin" Value="5,5,5,5" />
</Style>
</Application.Resources>
然后,Button
可以使用ButtonFormat
加载StaticResource
样式:
<Button x:Name="styleTestButton" Content="Style Sample" Style="{StaticResource ButtonFormat}"
VerticalAlignment="Bottom" Click="styleTestButton_Click" />
例如,在Button
点击事件中,您可以更改Button
的样式,如下所示:
private void styleTestButton_Click(object sender, RoutedEventArgs e)
{
var ButtonFormatBlue = Application.Current.Resources.FirstOrDefault(r => r.Key.ToString() == "ButtonFormatBlue");
styleTestButton.Style = ButtonFormatBlue.Value as Style;
}
或者您可以在后面的代码中完全定义新样式,并在后面的代码中使用C#将此样式设置为Button
:
private void styleTestButton_Click(object sender, RoutedEventArgs e)
{
var dynamicStyle = new Style();
dynamicStyle.TargetType = typeof(Button);
dynamicStyle.Setters.Add(new Setter(BackgroundProperty, Colors.Blue));
dynamicStyle.Setters.Add(new Setter(MarginProperty, new Thickness(5, 5, 5, 5)));
styleTestButton.Style = dynamicStyle;
}
需要知道,正如@MZetko所说,我们无法覆盖资源,这就是我们创建新资源的原因。
是否可以根据需要从visualstatetrigger加载它,或者我是否正在查看错误的方向?
是的,但是很难判断你是否看错了方向,这取决于不同的情况。例如,如果您的UIElements位于DataTemplate
,那么它不能与StateTriggers
一起使用,数据绑定是此方案的最佳解决方案。您可以参考VisualStateManager class的备注,它会显示使用VisualStateManager
的完美详情。