2012-08-06 66 views
0

我是WPF的新手,我想创建一个带5个按钮的WPF应用程序。点击每个按钮后,我想要在另一个面板上显示内容。现在我只想让不同的图像显示在右侧面板上的按钮点击。创建多个面板并在按钮上单击显示一个面板wpf

这里是我的XAML代码:

<Window x:Class="GridButton.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MyFirstApp" Height="350" Width="525" Loaded="Window_Loaded"> 
<Viewbox Stretch="Fill" StretchDirection="Both"> 
<DockPanel> 
    <StackPanel DockPanel.Dock="left" Margin="5" Width="Auto" VerticalAlignment="Center" Height="Auto"> 
     <Button Content="1" Name="button2" Click="button2_Click"> 
     </Button> 
     <Button Content="2" Name="button1" Click="button1_Click_1"> 
</Button> 
     <Button Content="3" Name="button3" Click="button3_Click"> 
      </Button> 
     <Button Content="4" Name="button4" Margin="5"> 
      </Button> 
     <Button Content="5" Name="button5" Margin="5" Click="button5_Click_1"> 
      </Button> 
    </StackPanel> 
     <StackPanel DockPanel.Dock="Right"> 
      <Image Name="img1" Source="Blue Hills.jpg" Stretch="Uniform" Visibility="Hidden" ImageFailed="Image_ImageFailed" Height="257" /> 

     </StackPanel> 

</DockPanel> 

而且我xaml.cs文件中包含的代码来显示图像:

private void button2_Click(object sender, RoutedEventArgs e) 
{ 

    img1.Visibility = Visibility.Visible; 
} 

我能得到的只有这么远。

回答

1

您可以设置Image控制的Source财产代码:

private void buttonx_Click(object sender, RoutedEventArgs e) 
{ 
    string path = ... // path to image file here 
    img1.Source = new BitmapImage(new Uri(path)); 
} 

你可以轻松地重复对所有按钮相同的点击处理程序,并检查一个被按下其中:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    Button button = sender as Button; 
    string path = null; 
    if (button == button1) 
    { 
     path = ... // path to image file 1 here 
    } 
    else if ... 

    if (path != null) 
    { 
     img1.Source = new BitmapImage(new Uri(path)); 
    } 
} 

如果你想从父面板中删除一个子面板(或其他控件)并添加另一个子面板,则必须修改面板的Children属性:

<StackPanel Name="parent"> 
    <StackPanel Name="child" /> 
</StackPanel> 

parent.Children.Remove(child); 
parent.Children.Add(...); // some other control here 

如果你想动态地创建子面板,这种方法通常是有意义的。如果您想在XAML中声明所有内容,则可以将所有子面板放入网格中,并像以前一样更改其可见性。

但是,您也可能更改ZIndex附加属性。

<Grid> 
    <StackPanel Name="child1"> 
    </StackPanel> 
    <StackPanel Name="child2"> 
    </StackPanel> 
    <StackPanel Name="child3"> 
    </StackPanel> 
</Grid> 

child3默认情况下,最上面的,但现在你可以设置ZIndex一些值> 0,使最上面的一个孩子:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    ... 
    // reset ZIndex on previous topmost panel to 0 before 
    Panel.SetZIndex(child1, 1); 
} 

或完全忽略按钮/表格/面板设计,并使用TabControl

+0

在每个按钮的点击上,我想要在面板上显示不同的图像。我该如何设置图像出现在StackPanel中,以及将来我会在StackPanel的Button按钮上显示不同的面板。请给出一些建议 – Shee 2012-08-06 12:03:17

+0

您的XAML显示您有5个不同的Click处理程序,因此您可以设置5个不同的图像。不是最有效的方法。我会编辑我的答案,给你一个提示如何继续。 – Clemens 2012-08-06 12:06:15

+0

我明白了,谢谢。还可以给我一个关于如何覆盖面板并只显示一个并隐藏其余按钮的提示。假设我想要显示一个包含很多内容的面板,而不是一个图像,那我该怎么做? – Shee 2012-08-06 12:14:09

相关问题