微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

访问 WPF C# 中的父元素

如何解决访问 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 举报,一经查实,本站将立刻删除。