2013-02-22 4 views
1

문제가 무엇인지 발견했습니다. C# 코드 자체와는 관계가 없지만 대신 XAML에 있습니다. 문제는 기본 색상이었습니다. XAML에 설정된 스타일이 내 스타일의 색상을 재정의했습니다.WPF에서 C# 코드를 통해 스타일을 적용 할 수 없음

결론적으로 XAML로 속성을 설정할 때 런타임에 C# 코드로 설정된 이후 스타일을 항상 무시합니다.이 점은 이상하게 보입니다.하지만 적어도 그것이 저에게 효과적이었습니다.

+0

스타일은 XAML에서 만들어야합니다. 또한 XAML에도 적용되었습니다. 왜 코드를 채우지 않는가? WPF에 대한 MVVM 패턴을 살펴보십시오. http://csharperimage.jeremylikness.com/2010/04/model-view-viewmodel-mvvm-explained.html Window (또는 다른 UserControl) 스타일에서 스타일을 사용하는 것은 좋지 않은 방법입니다. 건설자. – meorfi

+0

또한 올바른 스타일로 스타일을 만들고 사용하는 방법을 알려주는 좋은 자습서도 있습니다. http://www.wpftutorial.net/ :) 앞으로는 C#으로 스타일을 만들지 않을 것입니다. XAML 템플릿 (STyles 또는 기타 리소스)을 사용할 것입니다. – meorfi

+1

XAML 대신 C#을 사용하여 스타일을 지정하는 이유는 무엇입니까? 이유가있다. 그러나 나는 왜 여기에 왜 500 자 이내의 제한된 설명으로 설명 할 수는 없다. 일반적으로 나는 XAML 메커니즘이 맘에 들지 않지만, 기술적 인 이유도 많이있다. – Lispwave

답변

1

기본 배경 색상이 패널에 적용 할 수있는 C#의 스타일 피해야을 (AT-적어도 기본 사람을 통해 적용 할 수있는 새로운 Background 피할 수).

0

스타일 생성을 게시하지 않았습니까? 아마도 여기에 스타일이 없습니다.

작성하고 코드에 스타일을 설정하는 아주 좋은 짧은 예이다 StackOverflow의에 another similar answer 있습니다 :

Q : 사람은 뒤에 코드에서 WPF 스타일을 만드는 방법을 알고 있나요, I 웹이나 MSDN 문서에서 아무 것도 찾을 수 없습니다. 나는 이것을 시도했지만 그것은 작동하지 않습니다 :

을 : 당신은 오히려 RegisterName을 사용하는 것보다 스타일에 setter를 추가해야합니다. Window_Loaded 이벤트의 다음 코드는 Window 내에서 TextBlock의 모든 인스턴스에 대한 기본값이 될 새 TextBlock 스타일을 만듭니다. 하나의 특정 TextBlock에 명시 적으로 설정하려는 경우 리소스 사전에 스타일을 추가하는 대신 해당 컨트롤의 Style 속성을 설정할 수 있습니다.

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    Style style = new Style(typeof (TextBlock)); 
    style.Setters.Add(new Setter(TextBlock.ForegroundProperty, Brushes.Green)); 
    style.Setters.Add(new Setter(TextBlock.TextProperty, "Green")); 
    Resources.Add(typeof (TextBlock), style); 
} 
0

나는 귀하의 코드를 사용하여 검증을 위해 조금 수정했습니다. 잘 작동하는 것 같습니다. 모양이 다음 XAML 코드에서

Style Style_Panel = new Style(typeof(Panel)); 

     public void Init_Style() 
     { 
      // Create Styles : 
      #region "Create Styles" 

      Style_Panel.Setters.Add(new Setter() 
      { 
       Property = Panel.BackgroundProperty, 
       Value = new SolidColorBrush(Colors.Red) 
      }); 
      Resources.Add(Style_Panel.TargetType, Style_Panel); 

      #endregion 

      // Apply Styles : 
      #region "Apply Styles" 

      List<Visual> List_Visual = new List<Visual>(); 
      List_Visual.Add(new StackPanel() { Name = "btn" }); 
      //Enum_Visual(Panel_Main, List_Visual); 
      foreach (Visual visual in List_Visual) 
      { 
       if (visual is Panel) 
       { 
        Panel panel = visual as Panel; 
        //if (Tagged(panel, "titlebar")) 
        //{ 

        //} 
        //else if (Tagged(panel) == false) 
        { 
         // panel.Background = new SolidColorBrush(Colors.Red); // <- WORKS . 
         panel.Style = Style_Panel; // <- DOES NOT WORKS ! 
        } 
       } 
      } 

      #endregion 
     } 
+0

이봐, 시도해 주셔서 감사합니다.하지만 문제가 내 C# 코드에도 없다는 것을 발견했습니다. 그것은 XAML 코드에 있습니다. 나는 각 패널의 기본 색상을 제거 했었습니다. 새 스타일이 빨간색으로 표시되었으므로 올바르게 적용되었지만 갑자기 각 패널의 이벤트가 작동하지 않습니다 MouseDown처럼 배경이 아닐 수도 있습니다. 그래서 당신은 그들을 정말로 누를 수 없습니다. 나는 그것을 조사 할 것입니다. 여전히 XAML의 기본 색상이 스타일을 피하여 왜 적용되지 않는지 이해하지 못합니다. – Lispwave

+0

그것은 종속성 속성이 작동하는 방식입니다. 스타일에서 오는 값은 직접 설정 한 값으로 대체됩니다. 읽기 http://msdn.microsoft.com/en-us/library/ms743230.aspx – Manish

관련 문제