高级大宅男
2015-04-28 14:07
采纳率: 22.2%
浏览 2.9k

wpf 静态资源 动态资源的使用

刚开始接触并学习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>
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • threenewbee 2015-04-28 14:13

    这只是一个示例程序,当然把各种方式都给你展示一次。没有什么为什么。

    打赏 评论
  • threenewbee 2015-04-28 14:20

    他就是告诉你,如果两个都定义了,那么静态资源的优先级高,定义的资源不起效果,是红色,而最下面那个,动态资源的优先级低,所以是黄色。

    打赏 评论
  • foreach_break 2015-04-30 09:14

    不知道你说的第个是哪个?

    如果你说的是<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>
    
    打赏 评论
  • foreach_break 2015-04-30 09:27
    <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>
    
    打赏 评论

相关推荐 更多相似问题