2012-10-23 52 views
2

对于WPF来说,我真的很陌生,正在努力使自己的头脑与样式有关。首先,风格不会在任何地方抛出任何错误,尽管我仍然不确定它是否完全正确......所以这里是我的XAML风格;以编程方式应用样式来控制

编辑:风格应该让我的自定义用户控件在使用一个Storyboard和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:

我修改我的复选框选中事件来设置它添加到画布后能见度为隐藏,并用click事件的新按钮,设置能见度可见的,但遗憾的是它没有解决我的问题。

回答

2

您使用的是DataTrigger是结合,但我相当肯定要绑定到UserControl.Visibility代替,所以你需要使用不同的绑定类型。

默认情况下所有绑定引用DataContext,所以引用其他的东西比DataContext,你需要指定不同的源为您的结合,如RelativeSource结合Self

<DataTrigger Binding="{Binding Visibility, RelativeSource={RelativeSource Self}}" Value="Visible"> 

作为替代,您可以使用常规的Trigger而不是DataTrigger,这应该将触发器设置为UserControl的Property,而不是通过绑定来查找属性。

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

是不是DataTrigger应用于控件的DataContext?我认为他应该使用正常的触发器或在当前DataTrigger指定RelativeSource – Dtex

+0

请参阅编辑2,我尝试了什么建议,但无济于事。 –

+0

@Dtex你说得对,我不知道我是怎么错过的。让我更新我的答案:) – Rachel

相关问题