【问题标题】:How do I close the window and the buttons?如何关闭窗口和按钮?
【发布时间】:2014-07-16 19:34:26
【问题描述】:

我的这个窗口有一个“关闭”按钮。

当我按下“关闭”按钮时,它只会隐藏蓝色窗口,而不会隐藏图像中的 2 个按钮。

我希望它隐藏一切。我已经附上了这两个类的 C# 代码以及所有按钮的 XAML 代码。

  <local:KinectHoverButton Grid.Column="0" x:Name="leftbtn" Style="{StaticResource KinectHoverButtonScrollLeftStyle}" Click="PageLeftButtonClick" IsEnabled="{Binding ElementName=ControlsBasicsWindow, Path=PageLeftEnabled}"/>
  <local:KinectHoverButton Grid.Column="2" x:Name="right_btn" Style="{StaticResource KinectHoverButtonScrollRightStyle}" Click="PageRightButtonClick" IsEnabled="{Binding ElementName=ControlsBasicsWindow, Path=PageRightEnabled}"/>

隐藏按钮的方法:

public partial class ImagesGrid : UserControl
{
    public ImagesGrid()
    {
        InitializeComponent();
        leftbtn.Visibility = System.Windows.Visibility.Hidden;
        right_btn.Visibility = System.Windows.Visibility.Hidden;
    }
    public  void btn()
    {
        leftbtn.Visibility = System.Windows.Visibility.Hidden;
        right_btn.Visibility = System.Windows.Visibility.Hidden;
    }
}

隐藏SelectionDisplay窗口的方法和btn方法的调用

private void OnCloseFullImage(object sender, RoutedEventArgs e)
{
    // Always go to normal state before a transition
    this.Visibility = System.Windows.Visibility.Hidden;
    ImagesGrid img = new ImagesGrid();
    img.btn();
}

我想让按钮可见的地方

else if (button.Tag is WineModel)
{
    var wineModel = button.Tag as WineModel;
    var selectionDisplay = new SelectionDisplay(wineModel);
    this.kinectRegionGrid.Children.Add(selectionDisplay);
    leftbtn.Visibility = System.Windows.Visibility.Visible;
    right_btn.Visibility = System.Windows.Visibility.Visible;
    e.Handled = true;
}

编辑:SelectionDisplay.xaml

<UserControl x:Class="Microsoft.Samples.Kinect.ControlsBasics.SelectionDisplay"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:k="http://schemas.microsoft.com/kinect/2013"

         mc:Ignorable="d" 
         d:DesignHeight="300"
         d:DesignWidth="300"
         Background="Transparent"
         FontFamily="Segoe UI"
         FontSize="30" Loaded="UserControl_Loaded">

<UserControl.Resources>
    <Style TargetType="{x:Type TextBlock}" x:Key="labelStyle">
        <Setter Property="FontSize" Value="15"/>
        <Setter Property="Foreground" Value="Gray"/>
    </Style>
    <Style TargetType="{x:Type TextBlock}" x:Key="valueStyle">
        <Setter Property="TextWrapping" Value="Wrap"/>
        <Setter Property="FontSize" Value="24"/>
    </Style>
</UserControl.Resources>
<!--<Grid x:Name="layoutRoot">-->
    <Grid x:Name="grid" Background="{StaticResource BlueBrush}" Width="auto">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>
    <Grid Grid.Column="0">
        <Image x:Name="Display" HorizontalAlignment="Left" 
               VerticalAlignment="Center" Height="185" Width="293" Margin="50,0,10,0" Source="{Binding Image}" />
    </Grid>
    <StackPanel Grid.Column="1">
        <TextBlock Text="Origin:" Style="{StaticResource labelStyle}"/>
        <TextBlock Text="{Binding Origin}"  Style="{StaticResource valueStyle}"/>
        <TextBlock Text="Grapes" Style="{StaticResource labelStyle}"/>
        <TextBlock Text="{Binding Grapes}" Style="{StaticResource valueStyle}"/>
        <TextBlock Text="Color" Style="{StaticResource labelStyle}"/>
        <TextBlock Text="{Binding Color}" Style="{StaticResource valueStyle}"/>
        <TextBlock Text="Nose" Style="{StaticResource labelStyle}"/>
        <TextBlock Text="{Binding Nose}" Style="{StaticResource valueStyle}"/>
        <TextBlock Text="Price" Style="{StaticResource labelStyle}"/>
        <TextBlock Text="{Binding Price, StringFormat='C'}" Style="{StaticResource valueStyle}"/>
    </StackPanel>
    <Grid Grid.Column="2">
        <k:KinectCircleButton Style="{StaticResource CancelButtonStyle}" Foreground="White" Click="OnCloseFullImage"
                              VerticalAlignment="Top"/>
    </Grid>        
</Grid>
<!--</Grid>-->

【问题讨论】:

  • System.Windows.Visibility.Collapsed
  • @patrick,虽然这通常是一个更好的选择,但无论哪种方式都有“Visibility.Hidden”的用例,它不会影响我的回答中提到的按钮可见性。

标签: c# wpf xaml


【解决方案1】:

这段代码(来自关闭处理程序)

ImagesGrid img = new ImagesGrid();
img.btn();

创建一个全新的“ImagesGrid”,然后指示它隐藏。您需要获取对现有“ImagesGrid”的引用并在其上调用btn 方法。

由于它们绑定在一起,我会将“滚动”按钮作为包含“关闭”按钮的同一用户控件的一部分,并完全避免该问题。如果您真的想传递参考:

如果您的主用户控件具有“ImagesGrid”

<local:ImagesGrid Name="ScrollButtons"/>

然后你会写:

ScrollButtons.btn();

当然,这会导致问题,因为您的其他用户控件可能无法访问“ScrollButtons”,因此您需要在创建“ main" 用户控件等。它变得非常混乱,这就是为什么我将两者结合起来!

【讨论】:

  • 你是什么意思?你能解释清楚一点吗?
  • @user3660050,添加了一个最小示例。必须将引用传递给用户控件开始变得很长,所以我也注意到了这一点,但至少希望它更清楚。
  • 组合按钮需要什么?如果它更容易,我宁愿使用它
  • @user3660050 您将拥有一个包含主查看区域和“图像网格”的父用户控件(或者如果用户控件没有获得任何东西,则只有两个按钮)。然后,当您隐藏父用户控件(使用关闭按钮)时,所有内容都会隐藏。
  • 我已经编辑了主帖并为 SelectionDisplay 类添加了 xaml;这样可以吗?
猜你喜欢
  • 1970-01-01
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
相关资源
最近更新 更多