1. 界面效果如下:

2. 頁面 .xaml代碼如下:
<Window x:Class="MenuAndToolBar.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <DockPanel><!--停靠布局,讓菜單欄和工具欄位於窗口頂部--> <Menu DockPanel.Dock="Top"> <MenuItem Header="File"><!--菜單項為MenuItem,文字使用屬性 Header--> <MenuItem Name="menuOpen" Header="Open" Click="menuOpen_Click"></MenuItem> <MenuItem Header="Save"></MenuItem> <MenuItem Header="Delete"></MenuItem> </MenuItem> <MenuItem Header="Edit"></MenuItem> <MenuItem Header="View"></MenuItem> <MenuItem Header="About"></MenuItem> </Menu> <ToolBar DockPanel.Dock="Top"><!--ToolBar和StatusBar就是一個容器--> <Button Content="Save"></Button> <Separator></Separator> <Button Content="SaveAll"></Button> <Separator></Separator> <Button Content="FileExplorer"></Button> <Separator></Separator> <Button Content="Start"></Button> <Separator></Separator> <Button Content="Test"></Button> </ToolBar> <TextBox DockPanel.Dock="Top" Text="This is my space" Height="243"></TextBox> <StatusBar DockPanel.Dock="Bottom"> <TextBlock Text="statusBar"></TextBlock> </StatusBar> </DockPanel> </Grid> </Window>
3. 后台代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace MenuAndToolBar { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void menuOpen_Click(object sender, RoutedEventArgs e) { MessageBox.Show("Open the file you want."); } } }
出處:https://www.cnblogs.com/tommy-huang/p/4616462.html
=================================================================================
WPF StatusBar控件
應用程序窗口的頂部通常由前面章節中描述的主菜單和/或工具欄占用,窗口的底部通常是狀態欄。 狀態欄用於顯示有關應用程序當前狀態的各種信息,如光標位置,字數,任務進度等。 對我們來說幸運的是,WPF帶有一個很好的StatusBar控件,可以很容易地為您的應用程序添加狀態欄功能。
讓我們從一個非常基礎的例子開始:
<Window x:Class="WpfTutorialSamples.Common_interface_controls.StatusBarSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="StatusBarSample" Height="150" Width="300">
<DockPanel>
<StatusBar DockPanel.Dock="Bottom">
<StatusBarItem>
<TextBlock Name="lblCursorPosition" />
</StatusBarItem>
</StatusBar>
<TextBox AcceptsReturn="True" Name="txtEditor" SelectionChanged="txtEditor_SelectionChanged" />
</DockPanel>
</Window>
using System;
using System.Windows;
namespace WpfTutorialSamples.Common_interface_controls
{
public partial class StatusBarSample : Window
{
public StatusBarSample()
{
InitializeComponent();
}
private void txtEditor_SelectionChanged(object sender, RoutedEventArgs e)
{
int row = txtEditor.GetLineIndexFromCharacterIndex(txtEditor.CaretIndex);
int col = txtEditor.CaretIndex - txtEditor.GetCharacterIndexFromLineIndex(row);
lblCursorPosition.Text = "Line " + (row + 1) + ", Char " + (col + 1);
}
}
}

這一切都非常簡單 - 一個顯示當前光標位置的TextBlock控件,就像幾乎任何其他允許您編輯文本的應用程序一樣。 在這個非常基礎的窗口中,StatusBar可以很容易地成為一個帶有一組控件的面板,當我們需要將它分成幾個信息區域時,StatusBar的真正優勢就出現了。
高級StatusBar示例
讓我們嘗試使用StatusBar的更高級示例。 首先我們讓StatusBar使用另一個面板進行布局。 默認情況下,它使用DockPanel,但是當我們想要一個更復雜的布局時,使用以某種方式調整寬度和對齊內容的列,Grid是一個更好的選擇。
我們將Grid划分為三個區域,左側和右側區域具有固定寬度,中間列自動占用剩余空間。 我們還將在其間添加用於Separator控件的列。 下面是它現在的樣子:
<Window x:Class="WpfTutorialSamples.Common_interface_controls.StatusBarAdvancedSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="StatusBarAdvancedSample" Height="150" Width="400">
<DockPanel>
<StatusBar DockPanel.Dock="Bottom">
<StatusBar.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</StatusBar.ItemsPanel>
<StatusBarItem>
<TextBlock Name="lblCursorPosition" />
</StatusBarItem>
<Separator Grid.Column="1" />
<StatusBarItem Grid.Column="2">
<TextBlock Text="c:\path\of\current\file.txt" />
</StatusBarItem>
<Separator Grid.Column="3" />
<StatusBarItem Grid.Column="4">
<ProgressBar Value="50" Width="90" Height="16" />
</StatusBarItem>
</StatusBar>
<TextBox AcceptsReturn="True" Name="txtEditor" SelectionChanged="txtEditor_SelectionChanged" />
</DockPanel>
</Window>
using System;
using System.Windows;
namespace WpfTutorialSamples.Common_interface_controls
{
public partial class StatusBarAdvancedSample : Window
{
public StatusBarAdvancedSample()
{
InitializeComponent();
}
private void txtEditor_SelectionChanged(object sender, RoutedEventArgs e)
{
int row = txtEditor.GetLineIndexFromCharacterIndex(txtEditor.CaretIndex);
int col = txtEditor.CaretIndex - txtEditor.GetCharacterIndexFromLineIndex(row);
lblCursorPosition.Text = "Line " + (row + 1) + ", Char " + (col + 1);
}
}
}

如您所見,我添加了一些示例信息,例如中間列中的假文件名和右側的進度條,現在顯示靜態值。 你可以輕松地使這項工作真實,它可以讓你了解可以用StatusBar控件做什么。
小結
再次,WPF可以輕松獲得標准的Windows功能,在這種情況下,StatusBar已集成到您的應用程序中。
您甚至可以放置除這些示例中使用的控件之外的其他控件,比如按鈕,組合框等,但請注意,由於StatusBar在托管它們時不對這些控件應用任何特殊渲染,因此它可能看起來不像你期望它在狀態欄中的控件。 如果需要,可以使用自定義樣式處理這個問題,這是本教程中其他地方討論的主題。
轉載:WPF Tutorial
