我得到了在 WPF 中工作的以下 xaml 绑定场景。UIElements
在Grid
的资源中定义。将这些静态资源绑定到 aToggleButton
的Tag
属性。在切换按钮上单击将Tag
属性分配给 的Content
属性ContentControl
。
<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 设计器之间的差异呢?