2010-07-22 24 views
17

Teorik olarak, bir xaml dosyasında Fırçalar ve Renkler vb. Tanımlayabildiğimi ve bunu C# içinde bir button.background öğesine atayabileceğimi düşünüyorum. Ama bunu nasıl yaparım? Nerede böyle benim LinearGradientBrush tanımını koyarım:Kaynaklar xaml içinde nasıl tanımlanır ve kullanılır C#

Sadece çeşitli hata iletileri benim pencerenin xaml dosyası sonuçlarında çeşitli yerlerde koyarak
<LinearGradientBrush x:Key="BlaBrush"> 
       <GradientStop Offset="0" Color="Red"/> 
       <GradientStop Offset="1" Color="Green"/> 
</LinearGradientBrush> 

: How to use a defined brush resource in XAML, from C# açıklıyor: Ben stackoverflow burada bu soruyu buldum/

Bunun bir parçası, ama Fırça tanımını nerede yapacağını biliyor gibi görünüyor.

Ayrıca uygulamaya brightblue.xaml wpf şablonunu eklemeyi ve app.xaml uygulamasında application.resources öğesine <ResourceDictionary Source="ShinyBlue.xaml"/> ekledim. Bu benim tüm düğmelerimi anında mavi yapar, ancak yine de, NormalBrush gibi brightblue.xaml içinde tanımlanan "şeyler" C# 'den erişilemez - en azından nasıl olduğunu bilmiyorum.

Marc

+1

Tüm gönderilerinizi cevap olarak seçmek isterim ancak yapamıyorum: D Tüm bu bilgiler için teşekkürler. Bana çok yardımcı oluyor. – marc40000

cevap

17

Kişisel xaml şöyle görünecektir: değeri atamak için

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> 

, böyle kaynaklardan degrade fırça kapmak gerekir:

MainWindow.xaml.cs

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

Bu, WinRT XAML'de de çalışır. – dex3703

13

XAML senin elemanlarından birinin Kaynakları koleksiyonunda koyun: Daha fazla bilgi için Resources Overview bakın FindResource

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

kullanarak

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

Sonra kodunda onları .

7

Sen denetimin kaynaklara kaynak eklemek ve Quartermeister yazdı bunlara erişmek,

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

gibi uygulama kaynaklarına erişmek Ya yapabilirsiniz.

14

Varolan yanıtların kaynakları Window.Resources içine koyma hakkında konuştuğunu unutmayın. Kaynakların uygulama genelinde kullanılabilir olmasını istiyorsanız, bunları App.xaml veya daha iyisine koymayı düşünebilirsiniz, ancak görünümlerinize dahil edilebilecek ve başka yerlerde yeniden kullanılabilecek bağımsız kaynak sözlükleri oluşturabilirsiniz (diğer projeler dahil)

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

Bunu nasıl yaparım? Birden fazla satırlarını xaml'deki Application.Resources dosyasına eklemeye çalıştığımda, zaten tanımlanmış olduğunu bildiren bir hata alıyorum. Windows.resources içine koymak da benzer. Orada kendi xaml dosyasını eklediğimde, bir şekilde brightblue.xaml içinde tanımlanan "şeyleri" unutuyor? – marc40000

+0

@ marc40000: Düzenlemelerimi inceleyin. –

İlgili konular