WPF学习之逻辑资源

资源可以定义在以下几个位置:

  • 应用程序级资源:定义在App.xaml文件中,作为整个应用程序共享的资源存在
  •     <Application.Resources>
         <LinearGradientBrush x:Key="backgroundBrush" StartPoint="0,0" EndPoint="1,1">
          <GradientStop Color="Blue" Offset="0"/>
          <GradientStop Color="White" Offset="0.5"/>
          <GradientStop Color="Red" Offset="1"/>
        </LinearGradientBrush>
        </Application.Resources>

  • 窗体级资源:定义在Window或Page中,作为一个窗体或页面共享的资源存在
  • <Window.Resources>
            <!--<SolidColorBrush x:Key="backgroundBrush">Yellow</SolidColorBrush>-->
              <!--<LinearGradientBrush x:Key="backgroundBrush" StartPoint="0,0" EndPoint="1,1">
          <GradientStop Color="Blue" Offset="0"/>
          <GradientStop Color="White" Offset="0.5"/>
          <GradientStop Color="Red" Offset="1"/>
        </LinearGradientBrush>
            <SolidColorBrush x:Key="borderBrush">Red</SolidColorBrush>-->
        </Window.Resources>

  • 文件级资源:定义在资源字典的XAML文件中,再引用
  • 在vs中新建一个Resource Dictionary,然后代码拷贝到ResourceDictionary

     <!--<SolidColorBrush x:Key="backgroundBrush">Yellow</SolidColorBrush>-->
              <!--<LinearGradientBrush x:Key="backgroundBrush" StartPoint="0,0" EndPoint="1,1">
          <GradientStop Color="Blue" Offset="0"/>
          <GradientStop Color="White" Offset="0.5"/>
          <GradientStop Color="Red" Offset="1"/>
        </LinearGradientBrush>
            <SolidColorBrush x:Key="borderBrush">Red</SolidColorBrush>-->
    在引用页写入:

        <Window.Resources>
                  <ResourceDictionary Source="Myresource.xaml"></ResourceDictionary>
        </Window.Resources>

  • 对象(控件)级资源:定义在某个ContentControl中,作为其子容器、子控件共享的资源
  •  

    <Button Margin="5">

    <Button.Resources>

       <SolidColorBrush x:Key="myGreenBrush" Color="Green" />

     </Button.Resources>

     <Button.Content>

     <TextBlock Text="Sample Text" Background="{StaticResource myGreenBrush}" />

    </Button.Content>

    </Button>

     

    在资源引用的时候代码:

    <Button.Background>
                        <StaticResource ResourceKey="backgroundBrush"/>
                    </Button.Background>

    .........

      <Button Background="{StaticResource backgroundBrush}"
            BorderBrush="{StaticResource borderBrush}" Margin="5">

    除了以上StaticResource实现(只能使用一次)之外还有DynamicResource实现(每次更新都能被重新使用)。

     

    在XAML中解析资源顺序是按照由引用资源的控件向外层容器依次调用资源

     

     

    以上的方式是在xaml中实现的,当然也可以在code behind中建立

    (假如Window的名字是window,Button的名字是bth1)

         window.Resources.Add("backgroundBrush", new SolidColorBrush(Colors.Yellow));
                window.Resources.Add("borderBrush",new SolidColorBrush(Colors.Red));

    StaticResource实现:

     window.Background = (Brush)window.FindResource("backgroundBrush");
                btn1.Background = (Brush)btn1.FindResource("backgroundBrush");

     

     DynamicResource实现:

      btn1.SetResourceReference(Button.BackgroundProperty, "backgroundBrush");
                btn1.SetResourceReference(Button.BorderBrushProperty, "borderBrush");

     

    你可能感兴趣的:(WPF)