理论上,我认为我可以在xaml文件中定义画笔和颜色等,并将其分配给c#中的button.background。但是我该怎么做?我在哪里放置这样的lineargradientbrush定义:
<LinearGradientBrush x:Key="BlaBrush">
<GradientStop Offset="0" Color="Red"/>
<GradientStop Offset="1" Color="Green"/>
</LinearGradientBrush>
将它放在我窗口的xaml文件中的不同位置会导致各种错误消息:/
我在stackoverflow上找到了这个问题:How to use a defined brush resource in XAML, from C#解释了它的一部分,但他似乎知道在哪里做Brush定义。
我还尝试将shinyblue.xaml wpf模板添加到应用程序,并将<ResourceDictionary Source="ShinyBlue.xaml"/>
添加到app.xaml中的application.resources。这使得我的所有按钮立即变为蓝色,但是仍然可以从C#中访问shinyBlue.xaml中定义的像“NormalBrush”这样的“东西” - 至少我不知道如何。
马克
答案 0 :(得分:17)
你的xaml看起来像这样:
MainWindow.xaml
<Window x:Class="BrushResource.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<LinearGradientBrush x:Key="BrushOne" StartPoint="0,0.5" EndPoint="1,0.5" Opacity="0.5">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="Black" Offset="0" />
<GradientStop Color="Silver" Offset="1" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
<LinearGradientBrush x:Key="BrushTwo" StartPoint="0,0.5" EndPoint="1,0.5" Opacity="0.5">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="Maroon" Offset="0" />
<GradientStop Color="Silver" Offset="1" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Window.Resources>
<StackPanel>
<Button Content="Button" Width="100" Click="myButton_Click"/>
</StackPanel>
要分配值,您需要从以下资源中抓取渐变画笔:
MainWindow.xaml.cs
private void myButton_Click(object sender, RoutedEventArgs e)
{
(sender as Button).Background = this.Resources["BrushOne"] as LinearGradientBrush;
}
答案 1 :(得分:15)
请注意,现有的答案是关于将资源放在Window.Resources中。如果您希望资源在整个应用程序范围内可用,您可以考虑将它们放在App.xaml或更好的位置,创建可以包含在您的视图中并在其他地方重复使用的独立资源字典(包括其他项目)
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="DefaultStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
<Style x:Key="my_style" />
</ResourceDictionary>
</UserControl.Resources>
答案 2 :(得分:13)
将它们放在XAML中的一个元素的Resources集合中:
<Window ...>
<Window.Resources>
<LinearGradientBrush x:Key="BlaBrush">
<GradientStop Offset="0" Color="Red"/>
<GradientStop Offset="1" Color="Green"/>
</LinearGradientBrush>
<!-- Other resources -->
</Window.Resources>
<!-- Contents of window -->
</Window>
然后使用FindResource
在代码中获取它们var blaBrush = this.FindResource("BlaBrush") as LinearGradientBrush;
有关详细信息,请参阅Resources Overview。
答案 3 :(得分:8)
您可以
访问应用程序资源Application.Current.Resources["BlaBrush"] as LinearGradientBrush
或者,您将资源添加到控件的资源中,并像Quartermeister写的那样访问它们。