2010-07-22 5 views
17

에 사용할 수있는 방법 이론적으로 xaml 파일에서 Brushes and Colors 등을 정의하고이를 C#의 button.background에 지정할 수 있다고 생각합니다. 그러나 나는 그것을 어떻게합니까? 어디에서 이런 식으로 내 lineargradientbrush 정의를 배치해야합니까 :xaml에서 리소스를 정의하고 사용하여 C#

그냥 다양한 오류 메시지에 내 창의 XAML 파일 결과 다양한 장소에서 퍼팅
<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# 설명 : I에 유래 여기에이 질문을 발견/

그 중 일부이지만 Brush 정의를 수행 할 위치를 알고있는 것 같습니다.

또한 shinyblue.xaml wpf 템플릿을 앱에 추가하고 <ResourceDictionary Source="ShinyBlue.xaml"/>을 app.xaml의 application.resources에 추가했습니다. 이것은 모든 버튼을 즉시 파란색으로 만듭니다. 그러나 여전히, NormalBrush와 같은 shinyblue.xaml에 정의 된 "것들"은 C#에서 액세스 할 수 없습니다. 적어도 어떻게해야할지 모르겠습니다.

마크

+1

모든 게시물을 답변으로 선택하고 싶지만 다음을 할 수 없습니다. D 모든 정보를 제공해 주셔서 감사합니다. 그것은 나를 많이 돕는다. – marc40000

답변

17

귀하의 XAML이 같은 보일 것이다 : 값을 지정하려면

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> 

를,이 같은 자원에서 그라데이션 브러시를 잡아해야합니다

MainWindow.xaml.cs

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

이것은 WinRT XAML에서도 작동합니다. – dex3703

13

XAML에서 요소 중 하나의 자료 수집에 넣어 : 자세한 내용은 Resources Overview를 참조 FindResource

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

를 사용하여

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

그런 다음 코드에서 얻을 .

7

당신은 당신이 컨트롤의 리소스에 리소스를 추가하고 Quartermeister 쓴처럼 액세스,

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

으로 응용 프로그램 리소스에 액세스 또는 수 있습니다.

14

기존 답변은 Window.Resources에 리소스를 배치하는 것에 대해 설명합니다. 리소스를 응용 프로그램 전체에서 사용할 수있게하려면 App.xaml에 넣거나 다른 방법으로 다른 곳에서 재사용 할 수있는 독립 실행 형 리소스 사전을 만듭니다 (다른 프로젝트 포함)

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

어떻게하면됩니까? 하나 이상의 줄을 xaml의 Application.Resources에 추가하려고하면 이미 정의되어 있다는 오류 메시지가 나타납니다. windows.resources에 넣는 것도 비슷합니다. 내 자신의 xaml 파일을 추가하면 shinyblue.xaml에 정의 된 "things"를 잊어 버릴 수 있습니까? – marc40000

+0

@ marc40000 : 내 수정 사항을 확인하십시오. –

관련 문제