#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 нет… Я что-то пропустил в своем коде?