簡體   English   中英

自定義 Window 樣式未顯示在設計視圖中

[英]Custom Window Style not showing in design view

我正在嘗試在 VS2019(.NET Core 3.1)的 WPF 應用程序中自定義 window 樣式。 我正在關注一個視頻,目前將樣式直接添加到MainWindow.xaml 我的風格沒有出現在 XAML 設計視圖中(在視頻中),但是,風格在運行時正確顯示。

所有其他 styles 顯示正常。 我四處尋找可能是我在其他地方設置的 window 樣式,但我什么也沒找到。 起初,我在內部<WindowChrome.../>上遇到錯誤,說“'Microsoft.VisualStudio.XSurface.Wpf.Window' 類型的對象不能轉換為'System.Windows.Window'類型”但是那個問題似乎已經解決了自己。 我不確定這是否相關或線索。

知道發生了什么以及如何解決它嗎? 或者也許是一種強制采用設計時風格的技巧,這樣我就可以看到我在做什么?

代碼:

 <Window x:Class="FirmwareUpdater.MainWindow"
         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:FirmwareUpdater"
         xmlns:vm="clr-namespace:FirmwareUpdater.ViewModels" 
         mc:Ignorable="d"
         WindowStyle="None"
         WindowStartupLocation="CenterScreen"
         x:Name="AppWindow"
         Title="Firmware Updater"
         Height="600" Width="800">
    
     <Window.Resources>
         <Style TargetType="{x:Type local:MainWindow}">
             <Setter Property="Template">
                 <Setter.Value>
                     <ControlTemplate TargetType="{x:Type Window}">
                         <Border Background="Gray" Padding="{Binding OuterMarginSize, FallbackValue=10}">
                             <Grid Background="Red">
                             </Grid>
                         </Border>
                     </ControlTemplate>
                 </Setter.Value>
             </Setter>
         </Style>
     </Window.Resources>
    
     <WindowChrome.WindowChrome>
         <WindowChrome 
             CaptionHeight="{Binding TitleHeight}"
             ResizeBorderThickness="0"
             GlassFrameThickness="0"
             CornerRadius="0"/>
     </WindowChrome.WindowChrome>
        
    
     <Grid>
         <!-- Displays pages for navigation-->
         <Frame x:Name="mainFrame" 
                MaxHeight="600" MaxWidth="800" Margin="0,0,0,0" 
                NavigationUIVisibility="Hidden" />
     </Grid>
    
 </Window>

最近,我在關注這個系列教程時也遇到了這個問題,無論我使用哪個設計器:NetFramework 或 NetCore。 對我來說,在設計時查看更改的唯一方法是使用 Window.Resources 中的鍵定義 ControlTemplate 並將 Window 的模板設置為 DynamicResource:

<Window ...
        Template="{DynamicResource WindowBase}">
<Window.Resources>
        <ControlTemplate x:Key="WindowBase" TargetType="{x:Type Window}">
        </ControlTemplate>
</Window.Resources>
</Window>

我不知道這個解決方案有多可靠,但至少我不必運行我的應用程序來查看更改。

編輯

您還可以將 ControlTemplate 從 Window.Resources 移動到某個 ResourceDictionary 並將其設置為 Window 模板的 StaticResource。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM