我們即將轉移到WPF,目前正在模板化窗口上工作。WPF自定義窗口模板無內容
經過幾個小時的閱讀和下面的CodeProject和StackOverflow教程我正在努力與一個,我相信很簡單,透明度方面的問題。
當我運行應用程序,有我在窗口中沒有 「內容」。
我在Generic.xaml中定義了我的樣式,它位於Themes文件夾中。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MTApp"
x:Class="MTApp.Themes.Generic">
<ControlTemplate x:Key="WindowTemplate" TargetType="{x:Type Window}">
<Grid x:Name="WindowRoot">
<Border x:Name="WindowFrame">
<Grid Margin="0" VerticalAlignment="Top" MouseDown="Window_MouseDown">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25"/>
<ColumnDefinition Width="75*"/>
<ColumnDefinition Width="75"/>
<ColumnDefinition Width="25"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="40" />
<RowDefinition Height="30" />
<RowDefinition Height="35" />
<RowDefinition Height="35" />
<RowDefinition Height="140*" />
</Grid.RowDefinitions>
<Frame x:Name="background" Grid.Column="0" Grid.ColumnSpan="4" Grid.Row="0" Background="#ddd" BorderThickness="0 0 0 1" BorderBrush="#c9c9c9"/>
<Label x:Name="windowTitle" Grid.ColumnSpan="2" Content="Title Bar" VerticalAlignment="Center" Foreground="#393939" Grid.Row="0" Grid.Column="1" HorizontalAlignment="Center" FontFamily="Segoe UI Regular" FontSize="12"/>
<Grid Grid.Column="2" Grid.ColumnSpan="2" Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="13"/>
<ColumnDefinition Width="14"/>
<ColumnDefinition Width="13"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="15"/>
<RowDefinition Height="10" />
<RowDefinition Height="10" />
</Grid.RowDefinitions>
<Button x:Name="minimizeBtn" Content="" Background="#39b54a" BorderThickness="0" Grid.Row="1" Grid.Column="1" Margin="3 0 0 0" Click="minimizeBtn_Click"/>
<Button x:Name="maximizeBtn" Content="" Background="#f8be3f" BorderThickness="0" Grid.Row="1" Grid.Column="2" Margin="3 0 0 0" Click="maximizeBtn_Click"/>
<Button x:Name="quitBtn" Content="" Background="#f84646" BorderThickness="0" Click="quitBtn_Click" Grid.Row="1" Grid.Column="3" Margin="3 0 0 0"/>
</Grid>
</Grid>
</Border>
</Grid>
</ControlTemplate>
<Style x:Key="SkinWindowStyle" TargetType="Window">
<Setter Property="WindowStyle" Value="None" />
<Setter Property="AllowsTransparency" Value="True" />
<Setter Property="Background" Value="#ffffff" />
<Setter Property="Opacity" Value="100" />
<Setter Property="ResizeMode" Value="CanResize" />
<Setter Property="Width" Value="600" />
<Setter Property="Height" Value="300" />
<Setter Property="Template" Value="{StaticResource WindowTemplate}" />
<Style.Triggers>
<DataTrigger Binding="{Binding WindowState}" Value="Maximized">
</DataTrigger>
</Style.Triggers>
</Style>
它定義「WindowStyle」和「AllowsTransparency」因爲看到很多教程,如果我設置「AllowsTransparancy」爲假,我會得到一個邊界全黑色的窗口。
正如你可以從風格已經看到,我想要背景爲白色。但我所得到的只是一個「空白」的窗口。我想強制一些智慧,就像你從其他二傳手中看到的那樣。
我MainWindow.xaml,這是實際工作的應用程序是這樣的:
<Window x:Class="MTApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Style="{DynamicResource SkinWindowStyle}"
Background="White"
Height="300"
Width="350"
>
<Grid Background="White" Height="100" Width="200">
<TextBlock Text="Test" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" Background="White"/>
</Grid>
它使用Generic.xaml定義的風格,這一切工作正常。當然,背景,高度和寬度不能覆蓋樣式的屬性,因爲它的硬編碼,但仍然應顯示網格以及文本框。但是沒有一個出現。
最後,Generic.xaml.cs:
using System;
using System.Windows;
using System.Windows.Input;
namespace MTApp.Themes
{
public partial class Generic : ResourceDictionary
{
public Generic()
{
InitializeComponent();
}
/**
* Header Buttons Events
**/
private void minimizeBtn_Click(object sender, RoutedEventArgs e)
{
Application.Current.MainWindow.WindowState = WindowState.Minimized;
}
private void maximizeBtn_Click(object sender, RoutedEventArgs e)
{
if (Application.Current.MainWindow.WindowState == WindowState.Maximized)
{
Application.Current.MainWindow.WindowState = WindowState.Normal;
}
else
{
Application.Current.MainWindow.WindowState = WindowState.Maximized;
}
}
private void quitBtn_Click(object sender, RoutedEventArgs e)
{
Window.GetWindow(((FrameworkElement)e.Source)).Close();
}
/**
* Window Events
**/
private void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left)
{
Window.GetWindow(((FrameworkElement)e.Source)).DragMove();
}
}
}
}
你要知道,它從資源字典衍生,我不能把它從「窗口」工作作爲5個教程可在網上看到...
所以在這裏我的問題,爲什麼沒有顯示在我的自定義內容下面?我是否需要指定一個特定的畫布,然後我們可以將每個窗口的控件放入其中?認爲登錄窗口,選項窗口,消息/確認窗口。他們應該都具有相同的風格,因此我們希望窗口模板化。
哇,太簡單了。謝謝 !像魅力一樣工作。 – Richard