WPF触发器不工作,我究竟做错了什么? [英] WPF Trigger not working, what am i doing wrong?

查看:272
本文介绍了WPF触发器不工作,我究竟做错了什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下的code(仅适用于相关的片段)

 <色带:RibbonWindow .............>
    <电网>
        <织带:织带>
            <色带:RibbonToggleButton
                   X:名称=Button2的
                   SmallImageSource =图片\ SmallIcon.png
                   标签=属性>
                   <色带:RibbonToggleButton.Triggers>
                       <触发属性=ToggleButton.IsCheckedVALUE =真>
                           <二传手的TargetName =SPanel1属性=UIElement.IsVisibleVALUE =FALSE/>
                           <二传手的TargetName =SPanel2属性=UIElement.IsVisibleVALUE =真/>

                       < /触发>
                   < /色带:RibbonToggleButton.Triggers>

            < /色带:RibbonToggleButton>


        < /色带:色带>
    < /网格>

< /色带:RibbonWindow>
 

当我运行应用程序,它挂起来,TE调试器弹出。我究竟做错了什么?

我已经尝试设置对电网的触发器,包一切都在控制模板,并设定一个触发出现,同样的问题!

修改

我试图创造一个按钮,触发只有标记会导致未处理的异常错误。

 <按钮内容=按钮Grid.Row =1高度=23的Horizo​​ntalAlignment =左保证金=12,27,0,0名称= TestButtonVerticalAlignment =热门WIDTH =75>
      < Button.Triggers>
           <触发>< /触发>
      < /Button.Triggers>
< /按钮>
 

编辑2

使用数据触发使未处理的异常消失,但触发不响应:

 < StackPanel.Style>
                <风格的TargetType =StackPanel的>
                    < Style.Triggers>
                        < D​​ataTrigger绑定={结合的ElementName = Button2的,路径= ToggleButton.IsChecked}值=真>
                            < setter属性=UIElement.VisibilityVALUE =隐藏>< /二传手>
                        < / DataTrigger>

                    < /Style.Triggers>
                < /样式和GT;
            < /StackPanel.Style>
 

修改3

 <色带:RibbonToggleButton
              X:名称=Button2的
              SmallImageSource =图片\ SmallIcon.png
              标签=属性>

< /色带:RibbonToggleButton>
 

和面板被隐藏

 <的StackPanel
      Grid.Row =2
      Grid.Column =1
      X:名称=SPanel1
      能见度=可见>
      <标签> * Deafult电网*< /标签>
< StackPanel.Style>
     <风格的TargetType =StackPanel的>
          < Style.Triggers>
              < D​​ataTrigger绑定={结合的ElementName = Button2的,路径= ToggleButton.IsChecked}值=真>
               < setter属性=UIElement.VisibilityVALUE =隐藏>< /二传手>
              < / DataTrigger>
          < /Style.Triggers>
     < /样式和GT;
                < /StackPanel.Style>
< / StackPanel的>
 

和为我想要显示第二的StackPanel

 <的StackPanel
     Grid.Row =2
     Grid.Column =1
     X:名称=SPanel2
     能见度=隐藏>
         <标签> *面板2 *< /标签>
         < StackPanel.Style>
             <风格的TargetType =StackPanel的>
                 < Style.Triggers>
                     < D​​ataTrigger绑定={结合的ElementName = Button2的,路径=}器isChecked值=真>
                     < setter属性=UIElement.VisibilityVALUE =可见>< /二传手>
                     < / DataTrigger>

                 < /Style.Triggers>
             < /样式和GT;
         < /StackPanel.Style>
 < / StackPanel的>
 

解决方案

您需要使用DataTrigger,并设置两个面板的样式属性的复选框的属性格式器isChecked,这里的例子

 <复选框名称=检查CONTENT =PROVA=器isChecked真> < /复选框>

        <帆布NAME =SPanel1背景=蓝WIDTH =100高度=100>
            < Canvas.Style>
                <风格的TargetType =画布>
                    < Style.Triggers>
                        < D​​ataTrigger绑定={结合的ElementName =检查,路径=}器isChecked值=真>
                             < setter属性=能见度VALUE =隐藏>< /二传手>
                        < / DataTrigger>
                    < /Style.Triggers>
                < /样式和GT;
            < /Canvas.Style>
        < /帆布>
 

I have the following code (only relevant snippets)

<ribbon:RibbonWindow .............>
    <Grid>
        <ribbon:Ribbon>
            <ribbon:RibbonToggleButton 
                   x:Name="Button2"
                   SmallImageSource="Images\SmallIcon.png"
                   Label="Properties">
                   <ribbon:RibbonToggleButton.Triggers>
                       <Trigger Property="ToggleButton.IsChecked" Value="True">
                           <Setter TargetName="SPanel1" Property="UIElement.IsVisible" Value="False"/>
                           <Setter TargetName="SPanel2" Property="UIElement.IsVisible" Value="True"/>

                       </Trigger>
                   </ribbon:RibbonToggleButton.Triggers>

            </ribbon:RibbonToggleButton>


        </ribbon:Ribbon>
    </Grid>

</ribbon:RibbonWindow>

And when i run the application, it hangs up and te debugger pops up. What am i doing wrong?

I have tried setting the trigger on the grid, wrapping everything in a control template and setting a trigger there, same problem!

Edit

I have tried creating a button, and only the tag of trigger causes the Unhandled Exception error.

<Button Content="Button" Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="12,27,0,0" Name="TestButton" VerticalAlignment="Top" Width="75" >
      <Button.Triggers>
           <Trigger></Trigger>
      </Button.Triggers>
</Button>

Edit 2

Using Data triggers makes the Unhandled Exception go away but the trigger is not responding:

 <StackPanel.Style>
                <Style TargetType="StackPanel">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=Button2, Path=ToggleButton.IsChecked}" Value="True">
                            <Setter Property="UIElement.Visibility" Value="Hidden"></Setter>
                        </DataTrigger>

                    </Style.Triggers>
                </Style>
            </StackPanel.Style>

Edit 3

<ribbon:RibbonToggleButton 
              x:Name="Button2"
              SmallImageSource="Images\SmallIcon.png"
              Label="Properties">

</ribbon:RibbonToggleButton>

And The panel to be hidden

<StackPanel                  
      Grid.Row="2"                   
      Grid.Column="1"                       
      x:Name="SPanel1"
      Visibility="Visible">                        
      <Label>*Deafult Grid*</Label>   
<StackPanel.Style>                           
     <Style TargetType="StackPanel">                               
          <Style.Triggers>                                   
              <DataTrigger Binding="{Binding ElementName=Button2, Path=ToggleButton.IsChecked}" Value="True">                                     
               <Setter Property="UIElement.Visibility" Value="Hidden"></Setter>                                                                
              </DataTrigger>                                
          </Style.Triggers>                            
     </Style>
                </StackPanel.Style>
</StackPanel>

And for second StackPanel that i want to show

<StackPanel 
     Grid.Row="2" 
     Grid.Column="1" 
     x:Name="SPanel2"
     Visibility="Hidden">
         <Label>*Panel 2 *</Label>
         <StackPanel.Style>
             <Style TargetType="StackPanel">
                 <Style.Triggers>
                     <DataTrigger Binding="{Binding ElementName=Button2, Path=IsChecked}" Value="True">
                     <Setter Property="UIElement.Visibility" Value="Visible"></Setter>
                     </DataTrigger>

                 </Style.Triggers>
             </Style>
         </StackPanel.Style>
 </StackPanel>

解决方案

You need to use DataTrigger, and set the style property of the two panels to the IsChecked propery of the checkbox, here an example

        <CheckBox Name="check" Content="Prova" IsChecked="True"> </CheckBox>

        <Canvas Name="SPanel1" Background="Blue" Width="100" Height="100">
            <Canvas.Style>
                <Style TargetType="Canvas">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=check, Path=IsChecked}" Value="True">
                             <Setter Property="Visibility" Value="Hidden"></Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Canvas.Style>
        </Canvas>

这篇关于WPF触发器不工作,我究竟做错了什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆