刚开始接触并学习wpf 对资源的使用不太明白
代码如下(没有定义应用程序级的资源)
第二个按钮为什么不采用自己的资源而采用了window的资源?静态资源和动态资源的使用有何区别呢?
<Window.Resources>
<SolidColorBrush x:Key="ButtonBrush" Color="Red" />
</Window.Resources>
<StackPanel>
<Button Margin="5" Content="Static Resource Button A" Background="{StaticResource ButtonBrush}" />
<Button Margin="5" Content="Static Resource Button B" Background="{StaticResource ButtonBrush}">
<Button.Resources>
<SolidColorBrush x:Key="ButtonBrush" Color="Yellow" />
</Button.Resources>
</Button>
<Button Margin="5" Content="Change Button Resource" Click="Button_Click" />
<Button Margin="5" Content="Dynamic Resource Button A" Background="{DynamicResource ButtonBrush}" />
<Button Margin="5" Content="Dynamic Resource Button B" Background="{DynamicResource ButtonBrush}">
<Button.Resources>
<SolidColorBrush x:Key="ButtonBrush" Color="Yellow" />
</Button.Resources>
</Button>
</StackPanel>
这只是一个示例程序,当然把各种方式都给你展示一次。没有什么为什么。
他就是告诉你,如果两个都定义了,那么静态资源的优先级高,定义的资源不起效果,是红色,而最下面那个,动态资源的优先级低,所以是黄色。
不知道你说的第二
个是哪个?
如果你说的是<Button Margin="5" Content="Change Button Resource" Click="Button_Click" />
因为它既没有引用你这个UserControl中的静态资源,也没有引用动态资源,那就引用windows资源进行默认绘制.
关于资源,参考:
https://msdn.microsoft.com/zh-cn/library/ms750613.aspx#staticdynamic
下面是一个Style,你可用通过xaml的Style属性来引用.
<Style TargetType="Button">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush>
<GradientStop Offset="0.0" Color="AliceBlue"/>
<GradientStop Offset="1.0" Color="Salmon"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="FontSize" Value="18"/>
</Style>
<SolidColorBrush x:Key="ButtonBrush" Color="Red" />
上面的代码指定了一个x:Key
,就相当于指定了一个字典中的索引,或者叫键,你必须用这个键来访问这项资源.
下面的代码和你的代码类似,必须按x:Key指定资源,无论是静态还是动态指定.
<Window>
2: <Grid>
3: <Grid.Resources>
4: <Style TargetType="{x:Type Button}" x:Key="ButtonStyle">
5: <Setter Property="Height" Value="22"/>
6: <Setter Property="Width" Value="60"/>
7: </Style>
8: </Grid.Resources>
9: <Button Content="Button" Style="{StaticResource ButtonStyle}"/>
10: <Button Content="Button" Style="{StaticResource ButtonStyle}" Margin="156,144,286,145" />
11: </Grid>
12: </Window>
而下面的代码,是隐式指定,所谓隐式,就是你没有指定x:Key,但它隐式推断为typeOf(Button)
,这样,就可以不指定x:Key来修改你资源指定层次(控件字典、窗口字典、还是应用程序字典)的Button风格.
1: <Window>
2: <Grid>
3: <Grid.Resources>
4: <Style TargetType="{x:Type Button}">
5: <Setter Property="Height" Value="22"/>
6: <Setter Property="Width" Value="60"/>
7: </Style>
8: </Grid.Resources>
9: <Button x:Name="button1" Style="{x:Null}"/>
10: <Button x:Name="button2" Margin="156,144,286,145" />
11: <Button x:Name="button3" Margin="196,144,0,145" />
12: </Grid>
13: </Window>