簡體   English   中英

加載位於MainWindow.xaml中單獨文件中的資源

[英]Load resources located in seperate files inside the MainWindow.xaml

目標:創建一個XAML模板,可以重復使用並加載到主視圖中。 這可能嗎? 如果可以,怎么辦? 我已經閱讀了ResourceDictionary並提出了一些建議,但是我不確定從哪里繼續。

這是帶有我的資源的XAML(保持非常愚蠢和簡單):

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <StackPanel x:Key="myUnneccesaryButtonList">
        <Button Content="1"></Button>
        <Button Content="2"></Button>
        <Button Content="3"></Button>
    </StackPanel>

</ResourceDictionary>

在這里,我要使用上面的模板並加載它的MainWindow XAML:

<Window x:Class="Sample.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"
        mc:Ignorable="d"

        Title="Sample" WindowState="Maximized">

    <StackPanel x:Name="wrapper" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">

    </StackPanel>
</Window>

編輯:這是我的MainWindow,但Window.Resource聲明不起作用:

<Window x:Class="Sample.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"
        mc:Ignorable="d"

        Title="Sample" WindowState="Maximized">

    <Window.Resources>
        <ResourceDictionary Source="MyDictionary.xaml" >
    </Window.Resources>

    <StackPanel x:Name="wrapper" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">

    </StackPanel>
</Window>

myUnneccesaryButtonList不是模板,而是實際的StackPanel實例。

如果在ResourceDictionary中將其x:Shared屬性設置為false

<StackPanel x:Key="myUnneccesaryButtonList" x:Shared="False">
    <Button Content="1"></Button>
    <Button Content="2"></Button>
    <Button Content="3"></Button>
</StackPanel>

..您可以使用ContentControl在窗口中顯示它:

<ContentControl Content="{StaticResource myUnneccesaryButtonList}" />

您可能想要做的是創建一個自定義StackPanel類,該類始終添加Buttons

public class CustomStackPanel : System.Windows.Controls.StackPanel
{
    public CustomStackPanel()
    {
        Children.Add(new Button() { Content = "1" });
        Children.Add(new Button() { Content = "2" });
        Children.Add(new Button() { Content = "3" });
    }
}

用法:

<local:CustomStackPanel x:Name="wrapper" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>

如果您想要一個XML模板,那么您應該創建一個模板

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <DataTemplate x:Key="myUnneccesaryButtonList">
        <StackPanel >
            <Button Content="1"></Button>
            <Button Content="2"></Button>
            <Button Content="3"></Button>
        </StackPanel>
    </DataTemplate>
</ResourceDictionary>

然后您可以定義一個控件來托管它

<ContentControl ContentTemplate="{StaticResource myUnneccesaryButtonList}" />

要么

<ItemsControl ItemTemplate="{StaticResource myUnneccesaryButtonList}" />

記住將字典添加到參考資料中

<Window.Resources>
    <ResourceDictionary Source="YourDictionary.xaml" />
</Window.Resources>

或合並到

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="YourDictionary.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>

暫無
暫無

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

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