国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【.NET深呼吸】將XAML放到WPF程序之外

這篇具有很好參考價值的文章主要介紹了【.NET深呼吸】將XAML放到WPF程序之外。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

上一篇水文中,老周說了一下純代碼編寫 WPF 的大概過程。不過,還是不夠的,本篇水文中咱們還要更進(jìn)一步。

XAML 文件默認(rèn)是作為資源打包進(jìn)程序中的,而純代碼編寫又導(dǎo)致一些常改動的東西變成硬編碼了。為了取得二者平衡,咱們還要把一些經(jīng)常修改的東西放到 XAML 文件中,不過 XAML 文件不編譯進(jìn)程序里,而是放到外部,運行階段加載。比如一些對象屬性、畫刷、樣式、字體之類的,直接改文件保存就行,修改之后不用重新編譯項目。

要在運行階段加載 XAML,咱們只需認(rèn)識一個類就OK——?XamlReader,調(diào)用它的 Load 方法就能從 XAML 文件加載對象了。

下面老周就邊演示邊嘮叨一下相關(guān)的問題。

一、新建項目??梢詤⒄丈弦黄械淖龇?,用控制臺應(yīng)用程序項目,然后修改項目文件。也可以直接建 WPF 項目。都可以。

?

?

二、自定義窗口類,從 Window 派生。當(dāng)然,你直接用 Window 類也可以的。

public class MyWindow : Window
{
    const string XAML_FILE = "MyWindow.xaml";

    public MyWindow()
    {
        Title = "加載外部XAML";
        Height = 150;
        Width = 225;
        // 從XAML文件加載
        using FileStream fsIn = new(XAML_FILE, FileMode.Open, FileAccess.Read);
        FrameworkElement layout = (FrameworkElement)XamlReader.Load(fsIn);
        // 兩個按鈕要處理事件
        Button btn1 = (Button)layout.FindName("btn1");
        Button btn2 = (Button)layout.FindName("btn2");
        btn1.Click += OnClick1;
        btn2.Click += OnClick2;
        Content = layout;
    }

    private void OnClick2(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("第二個按鈕");
    }

    private void OnClick1(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("第一個按鈕");
    }
}

這個不復(fù)雜,咱們關(guān)注加載 XAML 部分。通過文件流 FileStream 讀取文件,而后在 XamlReader.Load 中加載。Load 方法返回的是 object 類型的對象,咱們要適當(dāng)?shù)剡M(jìn)行類型轉(zhuǎn)換。這個例子里面其實加載上來的是 Grid 類,但這里我只轉(zhuǎn)換為 FrameworkElement 就可以了,畢竟我后面只用到了 FindName 方法。Find 出來的是兩個 Button 對象,最后處理一下 Click 事件。

?

三、在項目中添加 MyWindow.xaml 文件。

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      Margin="12">
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>
    </Grid.RowDefinitions>
    <Button Name="btn1" Grid.Row="0" Margin="5,8">按鈕A</Button>
    <Button Name="btn2" Grid.Row="1" Margin="5,8">按鈕B</Button>
</Grid>

這里順便說一下,保存 XAML 文件時最好用 UTF-8 編碼,不然可能會報錯。方法是在 VS 里,【文件】-【XXX 另存為】。在保存文件對話框中,點“保存”按鈕右邊的箭頭,選擇“編碼保存”。

【.NET深呼吸】將XAML放到WPF程序之外

編碼選 UTF-8 無簽名(或帶簽名的也行)。

【.NET深呼吸】將XAML放到WPF程序之外

另一種方法是用記事本打開,再以 UTF-8 保存。

?

四、在項目中添加 styles.xaml。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    <Style TargetType="Button">
        <Setter Property="Background" Value="Red"/>
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="Padding" Value="5"/>
        <Setter Property="FontFamily" Value="楷體"/>
        <Setter Property="FontSize" Value="17"/>
        <Setter Property="HorizontalContentAlignment" Value="Center"/>
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="BorderBrush" Value="Yellow"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}"
                            CornerRadius="5">
                        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                          Margin="{TemplateBinding Padding}"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="Green"/>
            </Trigger>
            <Trigger Property="IsPressed" Value="True">
                <Setter Property="Background" Value="DarkSlateGray"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</ResourceDictionary>

里面包含一個 Button 控件模板。

?

五、在 Main 方法中,初始化 Application 類,并且從外部 XAML 中加載資源字典。

[STAThread]
static void Main(string[] args)
{
    Application app = new();
    using FileStream extFile = new FileStream("styles.xaml", FileMode.Open, FileAccess.Read);
    ResourceDictionary dic = (ResourceDictionary)XamlReader.Load(extFile);
    app.Resources = dic;
    app.Run(new MyWindow());
}

由于是在 app 處加載的資源,所以按鈕樣式會應(yīng)用到整個程序。

?

六、打開項目文件(*.csproj),我們要做點手腳。

<ItemGroup>
    <Page Remove="*.xaml"/>
    <None Include="*.xaml"/>
</ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
    <Exec Command="copy /y *.xaml $(OutDir)" />
</Target>

老周解釋一下加了顏色的部分。

1、Page 表示XAML文件最終生成二進(jìn)制文件,且塞進(jìn)目標(biāo)程序集中。加了 Remove 表示排除這一行為。說人話就是:本項目不編譯 XAML 文件。

2、None 表示該項目中 XAML 文件“啥也不是”,編譯時不做任何處理。

3、PostBuild 任務(wù)指定一條命令,在生成項目之后執(zhí)行。此處是把項目目錄下的 XAML 文件復(fù)制到輸出目錄。$(OutDir) 在 VS 中表示宏(也是 MSBuild 的屬性)。在命令實際執(zhí)行時,替換為實際目錄路徑,如 bin\Debug\net7.0-windows。

也可以用 $(TargetDir),不過 TargetDir 替換的是完整路徑,OutDir 是用相對路徑的。

?

現(xiàn)在生成一下項目,若沒有問題,在輸出目錄下除了程序文件,還有那兩個 XAML 文件。運行一下。

【.NET深呼吸】將XAML放到WPF程序之外

關(guān)閉程序,用記事本打開 styles.xaml 文件,把按鈕的背景色改成橙色。

【.NET深呼吸】將XAML放到WPF程序之外

保存并關(guān)閉文件,重新運行程序。

【.NET深呼吸】將XAML放到WPF程序之外

咱們并沒有重新編譯程序。接下來用記事本打開 MyWindow.xaml 文件,改一下按鈕上的文本。

【.NET深呼吸】將XAML放到WPF程序之外

保存并關(guān)閉文件,不用編譯代碼,再次運行程序。

【.NET深呼吸】將XAML放到WPF程序之外

?

這樣就很方便修改了,不必每次都重新編譯。?

下一篇老周還會說說純代碼寫 WPF 的模板問題。三維圖形就看心情了。因為 3D 圖形的構(gòu)造和一般控件應(yīng)用差不多,就是用代碼建立 WPF 對象樹。文章來源地址http://www.zghlxwxcb.cn/news/detail-486464.html

到了這里,關(guān)于【.NET深呼吸】將XAML放到WPF程序之外的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • WPF XAML(一)

    WPF XAML(一)

    問:XAML的含義是什么?為什么WPF中會使用XAML?而不是別的? 答:在XAML是基于XML的格式,XML的優(yōu)點在于設(shè)計目標(biāo)是具有邏輯性易讀而且簡單內(nèi)容也沒有被壓縮。? 其中需要提一下XAML文件在 Visual Studio (VS) 編譯時,是會被轉(zhuǎn)換為BAML。BAML最終會以資源的形式嵌入到DLL或者EXE程序

    2024年02月02日
    瀏覽(21)
  • WPF: XAML語法規(guī)范詳解

    WPF(Windows Presentation Foundation)是.NET框架的一個組成部分,用于構(gòu)建桌面應(yīng)用程序的用戶界面。XAML(Extensible Application Markup Language)是一種基于XML的標(biāo)記語言,用于定義WPF應(yīng)用程序的界面和邏輯。 XAML文件擴(kuò)展名為.xaml,它是一種XML格式的文件。XAML文件通常包含以下部分: x

    2024年04月23日
    瀏覽(27)
  • 【W(wǎng)PF系列】- XAML語法規(guī)范

    定義XAML語法術(shù)語是XAML語言規(guī)范中進(jìn)行定義或引用。XAML是基于XML的語言,遵循或擴(kuò)展XML結(jié)構(gòu)規(guī)則。XAML是基于描述XML語言或XML文檔對象模型時常用的術(shù)語。 XAML是一種標(biāo)記語言。CLR是可實現(xiàn)運行時語言。XAML不是CRL運行一部分。僅是使用于WPF的XAML時實例化運行的一種表達(dá)形式。

    2024年02月05日
    瀏覽(42)
  • WPF XAML中使用依賴屬性

    自定義的控件 MyCustomControl ,它有一個依賴屬性 MyProperty 。首先,我們需要在控件的代碼文件中創(chuàng)建這個依賴屬性: 在XAML文件中使用這個控件及其依賴屬性: 在這個例子中, local 是XAML文件中定義的XML命名空間前綴, clr-namespace:WpfApp 指定了 MyCustomControl 定義所在的命名空間。

    2024年02月20日
    瀏覽(30)
  • 【wpf】xaml 中的參數(shù)復(fù)用

    【wpf】xaml 中的參數(shù)復(fù)用

    xaml中有幾種復(fù)用的方式: 有時在xaml中,我們需要復(fù)用一些參數(shù),比如 固定的一個值。 有時是固定的一個樣式。 有時多個控件都要設(shè)置一個高度,我可以引入sys 我就使用這個吧: xmlns:sys=\\\"clr-namespace:System;assembly=mscorlib\\\" 用的更多的其實是margin,我們試一試: 這里 mm 用的是

    2024年02月07日
    瀏覽(25)
  • Microsoft.Xaml.Behaviors.Wpf 的使用

    System.Windows.Interactivity.WPF這個已經(jīng)過時,可以使用?Microsoft.Xaml.Behaviors.Wpf ,基本使用查不多,

    2024年02月13日
    瀏覽(24)
  • WPF國際化的實現(xiàn)方法(WpfExtensions.Xaml)

    WPF國際化的實現(xiàn)方法(WpfExtensions.Xaml)

    https://blog.csdn.net/eyupaopao/article/details/120090431 resx資源文件實現(xiàn) resx資源文件,實現(xiàn)的過程比第一種復(fù)雜,但resx文件本身編輯比較簡單,維護(hù)起來比較方便。需要用到的框架:WpfExtensions.Xaml 為每種語言添加.resx資源文件,放在I18nResource文件夾下 I18nResource.resx 代表英語,名字不要

    2024年02月12日
    瀏覽(30)
  • 二、深入淺出WPF之系統(tǒng)學(xué)習(xí)XAML語法

    跟Winforms一樣,UI也是個平面結(jié)構(gòu),與winforms的設(shè)計思維不同,WPF使用樹形邏輯來描述UI,下面是UI布局的簡單代碼 實際的頁面效果:

    2024年02月16日
    瀏覽(27)
  • 進(jìn)一步了解WPF UI 實現(xiàn)XAML語法

    進(jìn)一步了解WPF UI 實現(xiàn)XAML語法

    Extensible Application Markup Language (XAML) 是一種用于聲明性應(yīng)用程序編程的標(biāo)記語言。 Windows Presentation Foundation (WPF) 實現(xiàn) XAML 處理器實現(xiàn)并提供 XAML 語言支持。 WPF 類型的實現(xiàn)為 XAML 表示提供了必要的類型支持,從而確保了順暢的集成和高效的運行。 在 XAML 標(biāo)記中創(chuàng)建 WPF 應(yīng)用程序

    2024年02月02日
    瀏覽(26)
  • wpf復(fù)制xaml及其cs窗體到其他項目 添加現(xiàn)有項,選 .xaml.cs,點添加即可。VS2022

    wpf復(fù)制xaml及其cs窗體到其他項目 添加現(xiàn)有項,選 .xaml.cs,點添加即可。VS2022

    添加現(xiàn)有項,選 LoadingWindow.xaml.cs,點添加即可。

    2024年02月09日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包