2012-10-23 4 views
2

저는 스타일 이랑 관련하여 머리를 쓰려고 고군분투하면서 WPF에 처음 들어 왔습니다. 첫째,이 스타일은 어디에서나 오류를 발생시키지 않습니다. 아직 완전히 정확한지 확실하지는 않지만 ... 여기 스타일에 맞는 XAML이 있습니다.프로그래밍 방식으로 제어하는 ​​스타일 적용

편집 : 스타일은 내 사용자 지정 UserControl을, 난 너무로서, 아이들의 캔버스에 UserControl을 추가하는 체크 박스를 사용하고 여기에서 스토리 보드 및 DoubleAnimation

<Application.Resources> 
    <Style TargetType="{x:Type UserControl}" x:Key="UCStyle"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Visibility}" Value="Visible"> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Storyboard.TargetProperty="UserControl.Opacity" From="0.0" To="1.0" Duration="0:0:3"> 

          </DoubleAnimation> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.EnterActions> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</Application.Resources> 

을 사용하여 페이드 수 있도록해야합니다;

private void CheckBox_Checked(object sender, RoutedEventArgs e) 
    { 
     UserControlLibrary.UserControl1 userControl = new UserControlLibrary.UserControl1(); 
     userControl.Style = Resources["UCStyle"] as Style; 
     canvas1.Children.Add(userControl); 
    } 

나는 SO에 주위를 읽고, 이것은 당신이 스타일로 키를 참조하는 프로그래밍 방식으로 스타일을 적용하는 방법을 알리는 몇 가지 답을 발견했다. 그러나, 내가 이것을 실행할 때 usercontrol 페이드 인 것처럼 보이지 않습니다 (스타일을 제안하는 것처럼).

나는 여기서 중요한 무엇인가 놓치고 있습니까? 아니면 그냥 바보가되는거야?

편집 2 :

난 내 체크 박스를 캔버스에 추가 한 후 숨겨진에 대한 가시성을 설정하는 검사 이벤트, 눈에 보이는 가시성을 설정하는 클릭 이벤트와 새로운 버튼을 수정했지만, 슬프게도 그것은하지 않았다

내 문제를 해결해.

답변

2

에 바인딩하는 DataTrigger을 사용하고 있습니다. 그러나 대신 UserControl.Visibility에 바인딩하고 싶으므로 다른 바인딩 유형을 사용해야합니다. 기본적으로

모든 바인딩은, Self

대안으로
<DataTrigger Binding="{Binding Visibility, RelativeSource={RelativeSource Self}}" Value="Visible"> 

에 바인딩 같은 RelativeSource로, 당신은 당신의 바인딩에 대해 다른 소스를 지정해야합니다, 그래서 DataContext보다 다른 무언가를 참조하려면 DataContext 참조 DataTrigger 대신 일반 Trigger을 사용할 수 있습니다.이 바인딩은 바인딩을 통해 속성을 찾으려고 시도하는 대신 UserControl 속성에서 트리거를 기반으로해야합니다.

<Trigger Property="Visibility" Value="Visible"> 
+1

컨트롤의 DataContext에 DataTrigger가 적용되지 않았습니까? 나는 그가 정상적인 방아쇠를 사용하거나 현재의 DataTrigger에서 RelativeSource를 지정해야한다고 생각한다. – Dtex

+0

편집 2를 보아라. 나는 제안했지만 아무 소용이 없는지 시도했다. –

+0

@Dtex 네가 맞아, 내가 어떻게 그리워하는지 모르겠다. 내 대답을 업데이 트하자 :) – Rachel

관련 문제