gpt4 book ai didi

c# - ScrollViewer 忽略 ContentTemplateSelector

转载 作者:太空狗 更新时间:2023-10-29 23:38:30 24 4
gpt4 key购买 nike

我在使用 ScrollViewer 时遇到了问题。
这是示例 View 模型:

public class A
{
public string Text { get; set; }
}

public class B
{
public int Number { get; set; }
}

...和DataTemplateSelector:

public class ViewModelTemplateSelector : DataTemplateSelector
{
public DataTemplate ATemplate { get; set; }
public DataTemplate BTemplate { get; set; }

public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if (item is A)
return ATemplate;

if (item is B)
return BTemplate;

return base.SelectTemplate(item, container);
}
}

XAML:

<Grid>
<Grid.Resources>
<local:ViewModelTemplateSelector x:Key="ViewModelTemplateSelectorKey">
<local:ViewModelTemplateSelector.ATemplate>
<DataTemplate>
<TextBlock Text="{Binding Text}"/>
</DataTemplate>
</local:ViewModelTemplateSelector.ATemplate>
<local:ViewModelTemplateSelector.BTemplate>
<DataTemplate>
<TextBox Text="{Binding Number}"/>
</DataTemplate>
</local:ViewModelTemplateSelector.BTemplate>
</local:ViewModelTemplateSelector>
</Grid.Resources>

<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>

<ListBox x:Name="ListBox" ItemsSource="{Binding}"/>
<ScrollViewer Grid.Row="1" Content="{Binding SelectedItem, ElementName=ListBox}"
ContentTemplateSelector="{StaticResource ViewModelTemplateSelectorKey}"/>
<ContentControl Grid.Row="2" Content="{Binding SelectedItem, ElementName=ListBox}"
ContentTemplateSelector="{StaticResource ViewModelTemplateSelectorKey}"/>
</Grid>

当在 ListBox 中选择任何项目时,这是正在发生的事情:

enter image description here

如您所见,ScrollViewer 忽略了 ContentTemplateSelector,而 ContentControl 则没有。 ScrollViewer 继承自 ContentControl,乍一看,没有理由出现这种行为。

我知道,如果我为 AB 声明隐式数据模板,ScrollViewer 将正确处理它们,但这是不适合我的实际应用。

这是已知错误吗?还是我遗漏了什么?

UPD

我已经提交了 issue在 MS Connect 上。

最佳答案

我没有测试语法。如果有错,请告诉我,我会删除
这就是我要尝试的

<ScrollViewer Grid.Row="1">
<ContentControl Content="{Binding SelectedItem, ElementName=ListBox}"
ContentTemplateSelector="{StaticResource ViewModelTemplateSelectorKey}"/>
</ScrollViewer>

关于c# - ScrollViewer 忽略 ContentTemplateSelector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27633050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com