2017-08-04 31 views
0

一小時後找不到任何答案。如何通過WPF中的所有應用程序來維護menuBar和StatusBar

是否有反正我可以像我的應用程序中的所有窗口保持「模板」,所以他們總是有相同的StatusBarMenu?所以我不必每次創建窗口時手動添加它,因爲如果我添加例如MenuItem我需要將它添加到所有窗口。此外,爲了保持相同的網格佈局,即使這並不重要。

就像在PHP中使用默認模板並改變它的主體一樣。

這是我的實際代碼:

<Window x:Class="studies.myWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:studies" 
     mc:Ignorable="d" 
     Title="My window Title" Height="720" Width="1280" WindowStartupLocation="CenterScreen" Background="{DynamicResource BackgroundKey}" WindowState="Maximized"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      [...] 
     </Grid.ColumnDefinitions> 

     <Grid.RowDefinitions> 
      [...] 
     </Grid.RowDefinitions> 


     <Menu HorizontalAlignment="Stretch" Margin="0 0 0 20 " Grid.RowSpan="1" Grid.Column="0" Grid.ColumnSpan="12" VerticalAlignment="Stretch"> 
      <MenuItem Header="_File"> 
       <MenuItem Header="New _Company"/> 
       <MenuItem Header="New _Proyect"/> 
       <Separator /> 
       <MenuItem Header="_Exit" /> 
      </MenuItem> 
     </Menu> 

     <StatusBar HorizontalAlignment="Stretch" Grid.ColumnSpan="12" Grid.Row="12" VerticalAlignment="Stretch" Background="#FF212121" BorderBrush="#FF696969" > 
      <StatusBar.ItemsPanel> 
       <ItemsPanelTemplate> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="3*" /> 
          <ColumnDefinition Width="Auto" /> 
          <ColumnDefinition Width="3*" /> 
          <ColumnDefinition Width="Auto" /> 
          <ColumnDefinition Width="3*" /> 
         </Grid.ColumnDefinitions> 
        </Grid> 
       </ItemsPanelTemplate> 
      </StatusBar.ItemsPanel> 

      <StatusBarItem> 
       <TextBlock Name="lblCursorPosition" Text="Conectado como: daniaguado" Foreground="{DynamicResource LightForegroundBrush}" FontSize="10" IsEnabled="False" /> 
      </StatusBarItem> 
      <Separator Grid.Column="1" /> 
      <StatusBarItem Grid.Column="2"> 
       <TextBlock Foreground="{DynamicResource LightForegroundBrush}"/> 
      </StatusBarItem> 
      <Separator Grid.Column="3" /> 
      <StatusBarItem Grid.Column="4"> 

      </StatusBarItem> 

     </StatusBar> 

     <!-- Content goes here --> 

    </Grid> 
</Window> 
+0

您可以創建一個「資源」,並在不同的頁面中重複使用它,同時向其添加新內容 –

+0

@MattL。我爲'Resource'找到的所有示例都與樣式等有關,如何將組件轉換爲資源? –

+1

您可以製作任何資源。在你的App.xaml中,創建一個資源部分:,並在這些標記之間複製要創建資源的控件。所有你需要做的額外的是給它一個關鍵,'x:Key =「name」'。關鍵是你用來找到資源。這裏有一些更多的信息http://www.wpf-tutorial.com/wpf-application/resources/ –

回答

0

您可以創建一個從窗口繼承的類,並添加您共同的東西了這一點。

然後,應用程序中的窗口將使用MyWindow而不是Window。這也允許自定義C#。

不利的一面是,您可能需要在代碼中添加通用控件,而不是使用設計器,但它確實會給你想要的。

對不起,現在無法發佈示例代碼,因爲我在平板電腦上,但如果您無法解決此問題,請告訴我,下次嘗試顯示一些代碼我的電腦

+0

由於我使用XAML編碼視圖,不會在代碼矛盾中編寫組件嗎? –

+0

爲什麼會相互矛盾?自定義控件通常以代碼形式編寫。你可能認爲代碼應儘可能地保留在視圖之外,並且你是對的,但這有些不同,因爲這裏的代碼**是視圖。 –

+0

好的。我明白了。我是否也可以在該自定義的「MyWindow」中包含Grid?還是應該將其添加到XAML中?因爲'StatusBar'和'MenuBar'容納在'Grid'上。 –

相關問題