WPF instantiate class instance as resource

//xaml
<Window x:Class="WpfApp42.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:WpfApp42"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <local:Person Age="20" Name="Fred" x:Key="p1"/>
    </Window.Resources>
    <StackPanel>
        <Button Content="Click me" Margin="4" Padding="4" FontSize="16"
                HorizontalAlignment="Left"/>
        <Button Margin="4" HorizontalAlignment="Left" Padding="4">
            <StackPanel Orientation="Horizontal">
                <Image Source="pack://application:,,,/cl4.jpg" Width="16" Height="16"/>
                <TextBlock Text="Copy" Margin="10,0,0,0" VerticalAlignment="Center"
                           FontSize="16"/>
            </StackPanel>
        </Button>
        <Button Content="{StaticResource p1}" FontSize="16" Margin="4" Padding="4" HorizontalAlignment="Left"/>
        <Button Content="{StaticResource p1}" FontSize="16" Margin="4" Padding="4" HorizontalAlignment="Left">
            <Button.ContentTemplate>
                <DataTemplate>
                    <Grid TextBlock.FontSize="16">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>
                        <TextBlock Text="Name:"/>
                        <TextBlock Text="{Binding Name}"
                                   Margin="6,0,0,0"
                                   Foreground="Blue" 
                                   Grid.Column="1"/>
                        <TextBlock Text="Age:" Grid.Row="1"/>
                        <TextBlock Text="{Binding Age}" 
                                   Margin="6,0,0,0" Grid.Row="1"
                                   Foreground="Red" Grid.Column="1"
                                   TextAlignment="Right"/>
                    </Grid>
                </DataTemplate>
            </Button.ContentTemplate>
        </Button>
    </StackPanel>
</Window>


//cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApp42
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }

    class Person
    {
        public int Age { get; set; }
        public string Name { get; set; }

        public override string ToString()
        {
            return $"{Name} is {Age} years old";

        }
    }
}

 

 

 

posted @ 2024-04-07 23:27  FredGrit  阅读(1)  评论(0编辑  收藏  举报