如何解决访问 WPF C# 中的父元素
我无法到达与事件触发器不在同一网格中的按钮。 在一个网格中,我们有一个触发器:
<Grid x:Name="BottomGrid" Margin="0,30,0" >
<EventTrigger RoutedEvent="ButtonBase.Click" SourceName="OpenMenuButton">
<BeginStoryboard Storyboard="{StaticResource MenuOpen}"></BeginStoryboard>
</EventTrigger>
...
</Grid>
在第二个中,有一个按钮 OpenMenuButton
<Grid x:Name ="TopGrid" Height="30" VerticalAlignment="Top" Background="#FF299FDD" >
<Grid x:Name="ButtonGrid">
<Button Name="CloseMenuButton" VerticalAlignment="Center" Style="{DynamicResource MaterialDesignFlatButton}" Content="{materialDesign:PackIcon ArrowCollapseRight}" ToolTip="Icon" Click="ButtonCloseMenu_Click"/>
<Button Name="OpenMenuButton" VerticalAlignment="Center" Style="{DynamicResource MaterialDesignFlatButton}" Content="{materialDesign:PackIcon Menu}" ToolTip="Icon" Visibility="Collapsed" Click="ButtonopenMenu_Click"/>
</Grid>
...
</Grid>
但是有一个问题,EvenTrigger 找不到 OpenMenuButton,因为它在树中的其他地方。像 TopGrid.ButtonGrid.OpenMenuButton 这样的东西不起作用。什么是正确的相对路径及其语法?
解决方法
使用 BooleanAnimationUsingKeyFrames
更改 boolean
值。
还将 toryboard.TargetName = "MyMenu"
设置为您要通过点击事件控制的菜单的名称,并将 Storyboard.TargetProperty = "IsSubmenuOpen"
设置为菜单打开功能。
<Grid>
<Grid.Triggers>
<EventTrigger RoutedEvent="Button.Click" SourceName="OpenMenuButton">
<BeginStoryboard Name="MyBeginStoryboard">
<Storyboard>
<BooleanAnimationUsingKeyFrames Storyboard.TargetName="MyMenu" Storyboard.TargetProperty="IsSubmenuOpen" Duration="0:0:1" FillBehavior="HoldEnd">
<DiscreteBooleanKeyFrame Value="True" KeyTime="0:0:1" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Grid.Triggers>
<StackPanel>
<Button Width="44" Height="34" Name="OpenMenuButton" Foreground="Black" Background="Red" Margin="8,0" Content="Open Menu" HorizontalAlignment="Left">
</Button>
<Menu DockPanel.Dock="Top">
<MenuItem Header="_File" Name="MyMenu">
<MenuItem Header="_New" />
<MenuItem Header="_Open" />
<MenuItem Header="_Save" />
<Separator />
<MenuItem Header="_Exit" />
</MenuItem>
</Menu>
</StackPanel>
</Grid>
或者,如果您想从 Storyboard
下方的行打开和关闭菜单并将 button
更改为 ToggleButton
。
<DiscreteBooleanKeyFrame Value = "{Binding Path = IsChecked,ElementName = OpenMenuButton}" KeyTime = "0: 0: 1" />
Use the BooleanAnimationUsingKeyFrames>
完整代码
<Grid>
<Grid.Triggers>
<EventTrigger RoutedEvent="Button.Click" SourceName="OpenMenuButton">
<BeginStoryboard Name="MyBeginStoryboard">
<Storyboard>
<BooleanAnimationUsingKeyFrames Storyboard.TargetName="mymnu" Storyboard.TargetProperty="IsSubmenuOpen" Duration="0:0:1" FillBehavior="HoldEnd">
<DiscreteBooleanKeyFrame Value="{Binding Path=IsChecked,ElementName=OpenMenuButton}" KeyTime="0:0:1" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Grid.Triggers>
<StackPanel>
<ToggleButton Width="44" Height="34" Name="OpenMenuButton" Foreground="Black" Background="Red" Margin="8,0" Content="click" HorizontalAlignment="Left">
</ToggleButton>
<Menu DockPanel.Dock="Top">
<MenuItem Header="_File" Name="mymnu">
<MenuItem Header="_New" />
<MenuItem Header="_Open" />
<MenuItem Header="_Save" />
<Separator />
<MenuItem Header="_Exit" />
</MenuItem>
</Menu>
</StackPanel>
</Grid>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。