отображение содержимого класса xaml vb.net

#wpf #vb.net #xaml

#wpf #vb.net #xaml

Вопрос:

Ну, у меня есть MainWindow, написанный на xaml (vb.net ) с 10 кнопками, и для каждой кнопки у меня есть класс (с кнопками …) в моем проекте. Пример: когда я нажимаю на допустимую кнопку, я отображаю содержимое допустимого класса в моей сетке. Каждый класс создается в классе mainWdow. У меня также есть сетка в этом главном окне. Когда я нажимаю на кнопку в моем главном окне, я хотел бы отобразить содержимое соответствующего класса в моей сетке, и, конечно, я хочу иметь возможность использовать этот класс (нажимать на кнопки …).

Каков наилучший способ сделать это на vb.net / xaml, пожалуйста?

На этой веб-странице http://msdn.microsoft.com/en-us/library/cc903947 (v = против 95).aspx есть некоторые указания, но это не то, что я хочу, потому что я не хочу просто отображать содержимое только в моем классе, но я хочу иметь возможность работать с классом, отображаемым в моей сетке…

Я благодарю вас за ваши советы.

Ответ №1:

Хорошо, сначала вы должны прочитать о DataTemplate s на странице обзора шаблонов данных в MSDN. Теперь вот основной принцип … вместо того, чтобы помещать ваш повторно используемый XAML в Window s, объявите их в DataTemplate s в вашем Window.Resources разделе:

 <DataTemplate x:Key="StopDataTemplate">
    <!--Define your content here-->
</DataTemplate>
<DataTemplate x:Key="ValidDataTemplate">
    <!--Define your content here-->
</DataTemplate>
  

Теперь вы можете отображать содержимое этих DataTemplate файлов в ContentControl :

 <ContentControl Name="Content" ContentTemplate="{StaticResource ValidDataTemplate}" />
  

Затем, когда вы хотите переключиться на другое представление, вам просто нужно установить ContentControl.ContentTemplate свойство на другое DataTemplate (из Window кода):

 DataTemplate dataTemplate = (DataTemplate)FindResource("StopDataTemplate");
Content.ContentTemplate = dataTemplate;
  

Комментарии:

1. Хм, хорошо, это очень интересно, сначала я собираюсь написать некоторый код самостоятельно и протестировать его, прежде чем публиковать другой ответ. Но только один вопрос: когда я буду отображать, например, validDataTemplate, могу ли я использовать кнопки validDataTemplate с их событиями?

Ответ №2:

Ну, вот что я сделал, чтобы выполнить некоторые тесты:

 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DataTemplate x:Key="CBTemplate">
    <Grid Height="200" HorizontalAlignment="Left" Name="centralGrid" VerticalAlignment="Top" Width="200" Background="Red">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="300*" />
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Column="1" Text="{Binding Title}" 
                    Margin="10" HorizontalAlignment="Left" FontSize="20"/>
    </Grid>
</DataTemplate>
  

затем в моем MainWindow.xaml у меня есть это:

 <Grid x:Name="layout" Background="LightBlue" Margin="250,150,260,380">
        <ContentControl Name="Content" ContentTemplate="{StaticResource CBTemplate}" />
    </Grid>
  

И в MainWindow.vb у меня есть:

 Class MainWindow
Private t As Thing

Sub New()

    InitializeComponent()

    t = New Thing("test")
    layout.DataContext = t
End Sub
  

Конечный класс

Итак, моя программа компилируется правильно, но есть небольшая проблема: text=»{Binding Title}» не работает, и когда я заменяю его на «toto», проблем с отображением toto нет… Я что-то пропустил в своем коде?