2010-07-22 28 views
17

Về mặt lý thuyết, tôi nghĩ rằng tôi có thể xác định Brushes và Colors vv trong một tệp xaml và gán nó cho button.background trong C#. Nhưng làm thế nào để tôi làm điều đó? Tôi nên đặt nét LinearGradientBrush của tôi như thế này:Cách xác định và sử dụng tài nguyên trong xaml để chúng có thể được sử dụng trong C#

<LinearGradientBrush x:Key="BlaBrush"> 
       <GradientStop Offset="0" Color="Red"/> 
       <GradientStop Offset="1" Color="Green"/> 
</LinearGradientBrush> 

Chỉ cần đặt nó ở những nơi khác nhau trong kết quả tập tin XAML cửa sổ của tôi trong các thông báo lỗi khác nhau:/

Tôi tìm thấy câu hỏi này ở đây trên stackoverflow: How to use a defined brush resource in XAML, from C# điều này giải thích một phần của nó, nhưng anh ta dường như biết nơi để làm định nghĩa Brush.

Tôi cũng đã thử thêm mẫu wpf shinyblue.xaml vào ứng dụng và thêm <ResourceDictionary Source="ShinyBlue.xaml"/> vào application.resources trong app.xaml. Điều này làm cho tất cả các nút màu xanh của tôi ngay lập tức, nhưng vẫn còn, "những thứ" được xác định trong shinyblue.xaml như NormalBrush là không thể truy cập từ C# - ít nhất tôi không biết làm thế nào.

Marc

+1

I'ld muốn chọn tất cả các bài đăng của bạn làm câu trả lời nhưng tôi không thể: D Cảm ơn tất cả thông tin đó. Nó giúp tôi rất nhiều. – marc40000

Trả lời

17

XAML của bạn sẽ giống như thế này:

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> 

Để gán giá trị, bạn cần phải lấy bàn chải gradient từ các nguồn tài nguyên như thế này:

MainWindow.xaml.cs

private void myButton_Click(object sender, RoutedEventArgs e) 
    { 
     (sender as Button).Background = this.Resources["BrushOne"] as LinearGradientBrush; 
    } 
+0

Điều này cũng hoạt động trong WinRT XAML. – dex3703

13

Đặt chúng trong bộ sưu tập tài nguyên của một trong những yếu tố của bạn trong XAML:

<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> 

Sau đó, nhận được chúng trong mã bằng cách sử dụng FindResource

var blaBrush = this.FindResource("BlaBrush") as LinearGradientBrush; 

Xem Resources Overview để biết thêm thông tin .

7

Bạn có thể truy cập vào tài nguyên ứng dụng như

Application.Current.Resources["BlaBrush"] as LinearGradientBrush 

Hoặc, bạn có thêm tài nguyên vào nguồn lực của kiểm soát và truy cập chúng như Quartermeister viết.

14

Lưu ý rằng các câu trả lời hiện có nói về việc đặt các tài nguyên trong Window.Resources. Nếu bạn muốn tài nguyên có sẵn trong ứng dụng, bạn có thể xem xét đặt chúng trong App.xaml hoặc tốt hơn, tạo từ điển tài nguyên độc lập có thể được bao gồm trong chế độ xem của bạn và được sử dụng lại ở nơi khác (bao gồm các dự án khác)

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="DefaultStyles.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
     <Style x:Key="my_style" /> 
    </ResourceDictionary> 
</UserControl.Resources> 
+0

Tôi làm như thế nào? Khi tôi thử thêm nhiều hơn một dòng để Application.Resources trong xaml, tôi nhận được một lỗi nói với tôi nó đã được xác định. Đặt nó trong windows.resources tương tự. Khi tôi thêm tập tin xaml của riêng tôi ở đó, nó bằng cách nào đó quên "những thứ" được định nghĩa trong shinyblue.xaml? – marc40000

+0

@ marc40000: Xem các chỉnh sửa của tôi. –

Các vấn đề liên quan