Позволяет ли WPF преобразовывать сетку данных в визуальный тип? - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть сетка данных в WPF, как показано ниже. Мне нужно передать это как объект класса Type Visual в коде позади. Это возможно в WPF

<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False" >
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Image" Width="SizeToCells" IsReadOnly="True">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Image Source="{Binding Image}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

A DataGrid - это Visual, поэтому вам нужно только присвоить элементу x:Name в вашей разметке XAML:

<DataGrid x:Name="dg" ItemsSource="{Binding Items}" AutoGenerateColumns="False" > 
...

Затем вы можете ссылаться на него, используя это имя в коде -после того, как компилятор XAML создает для вас вспомогательное поле:

Visual v = dg;
1 голос
/ 23 апреля 2020

Да, вы можете.

Xaml:

<Window x:Class="WpfApp1.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:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <DataGrid  x:Name="MyGrid" ItemsSource="{Binding Items}" AutoGenerateColumns="False" Grid.Row="1">
            <DataGrid.Columns>
                <DataGridTemplateColumn Header="Image" Width="SizeToCells" IsReadOnly="True">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Image Source="{Binding Image}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
        <Grid.Background>
            <VisualBrush Visual="{Binding Visual}"/>
        </Grid.Background>

    </Grid>
</Window>

А вот что вы можете сделать в коде бэкэнда. Simplay назначает элемент управления Visual.

    public class VM
    {
        public Visual Visual { get; set; }
    }
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new VM {Visual = MyGrid};
        }
    }

Также можно напрямую ссылаться в xaml, используя

 <VisualBrush Visual="{Binding ElementName=MyGrid}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...