Я получил следующий сценарий привязки xaml, работающий в WPF. Определите UIElements
в статьях Grid
. Свяжите эти статические ресурсы с ToggleButton
Tag
. На кнопке переключения выберите свойство Tag
собственности Content
объекта ContentControl
.Установить ContentControls Content Свойство из codebehind throws исключение «значение не попадает в диапазон»
<Grid>
<Grid.Resources>
<TextBlock x:Key="t1"
Grid.Row="1"
Text="Text1" />
<TextBlock x:Key="t2"
Grid.Row="1"
Text="Text2" />
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal"
HorizontalAlignment="Center">
<ToggleButton Tag="{StaticResource t1}"
Margin="10"
Click="ButtonBase_OnClick"
Content="T1" />
<ToggleButton Tag="{StaticResource t2}"
Margin="10"
Click="ButtonBase_OnClick"
Content="T1" />
</StackPanel>
<ContentControl x:Name="cc"
Grid.Row="1" />
</Grid>
Кнопка переключения нажмите просто присваивает значение тега в Content
собственности.
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
cc.Content = ((FrameworkElement)sender).Tag;
}
Хотя это работает во всемогущем WPF, это невозможно в WinRT. WinRT жалуется на ArgumentException
«Значение не входит в ожидаемый диапазон». Я не знаю, почему?
Для тестирования я попробовал прямое назначение в обработчик событий, который работал, как и ожидалось:
cc.Content = new TextBlock { Text = "Text1" };
Чтобы сделать это еще более странно, я попробовал этот в WinRT:
<ContentControl x:Name="cc"
Content="{StaticResource t1}"
Grid.Row="1" />
Результат : Он работает в дизайнере, но не работает во время выполнения. Еще более невежественным об этом.
Прежде всего, что пытается сказать мне аргумент ArgumentException? Во-вторых, почему он работает в WPF? Как насчет расхождения между временем выполнения и конструктором VS?
Я понятия не имею, о чем вы говорите. Все это звучит как ужасный взлом, я имею в виду свойство «Tag»? Что это за winforms? Почему бы вам не создать надлежащую ViewModel и использовать 'DataTemplates' для динамического определения содержимого ContentPresenter? –
Я знаю, что есть гораздо более элегантные решения, подобные тем, которые вы предлагаете. Но мне просто интересно, почему он не работает. Возьмите его как мозговой тизер. – Marius
Прежде чем он взорвется с помощью WinRT, это значение тега TextBlock, как ожидалось? – Pragmateek