WPF触发器不工作,我究竟做错了什么? [英] WPF Trigger not working, what am i doing wrong?
问题描述
我有以下的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的HorizontalAlignment =左保证金=12,27,0,0名称= TestButtonVerticalAlignment =热门WIDTH =75>
< Button.Triggers>
<触发>< /触发>
< /Button.Triggers>
< /按钮>
编辑2
使用数据触发使未处理的异常消失,但触发不响应:
< StackPanel.Style>
<风格的TargetType =StackPanel的>
< Style.Triggers>
< DataTrigger绑定={结合的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>
< DataTrigger绑定={结合的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>
< DataTrigger绑定={结合的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>
< DataTrigger绑定={结合的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屋!