WPF:如何从 DataTemplate 获取当前继承者 ListView
我有 ListView 的 2 个继承者:
public class FileListView : ListView
public class ThumbnailListView : ListView
在 XAML 中,我有以下代码:
<Window.Resources>
<DataTemplate x:Key="FileListViewTemplate">
<dtc:FileListView/>
</DataTemplate>
<DataTemplate x:Key="ThumbnailViewTemplate">
<dtc:ThumbnailView/>
</DataTemplate>
</Window.Resources>
<Grid>
<CheckBox x:Name="MyCheckBox">
<ContentControl x:Name="MyContentControl" MouseDown="OnContentControlMouseDown">
<DataTemplate>
<ContentPresenter x:Name="AudioPresenter"
ContentTemplate="{StaticResource FileListTemplate}"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding ElementName=MyCheckBox, Path=IsChecked}"
Value="true">
<Setter TargetName="AudioPresenter"
Property="ContentTemplate"
Value="{StaticResource ThumbnailViewTemplate}" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ContentControl>
</Grid>
在后面的代码中:
public ListView GetCurrentListView()
{
ListView lv = null;
DataTemplate fileListViewTemplate = base.FindResource("FileListViewTemplate")
as DataTemplate;
DataTemplate thumbnailViewTemplate = base.FindResource("ThumbnailViewTemplate")
as DataTemplate;
ContentPresenter contentPresenter = VisualTreeHelper.GetChild(this.MyContentControl, 0)
as ContentPresenter;
try
{
lv = fileListViewTemplate.FindName("FileListView", contentPresenter)
as ListView;
}
catch (Exception)
{
lv = thumbnailViewTemplate.FindName("ThumbnailView", contentPresenter)
as ListView;
}
return lv;
}
如果注意到 CheckBox,那么我想查看 ThumbnailView,否则我想查看 FileListView。有时我想从代码后面获取当前列表视图。 我做错了什么?
I have 2 inheritors of ListView:
public class FileListView : ListView
public class ThumbnailListView : ListView
In XAML I have following code:
<Window.Resources>
<DataTemplate x:Key="FileListViewTemplate">
<dtc:FileListView/>
</DataTemplate>
<DataTemplate x:Key="ThumbnailViewTemplate">
<dtc:ThumbnailView/>
</DataTemplate>
</Window.Resources>
<Grid>
<CheckBox x:Name="MyCheckBox">
<ContentControl x:Name="MyContentControl" MouseDown="OnContentControlMouseDown">
<DataTemplate>
<ContentPresenter x:Name="AudioPresenter"
ContentTemplate="{StaticResource FileListTemplate}"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding ElementName=MyCheckBox, Path=IsChecked}"
Value="true">
<Setter TargetName="AudioPresenter"
Property="ContentTemplate"
Value="{StaticResource ThumbnailViewTemplate}" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ContentControl>
</Grid>
In code behind:
public ListView GetCurrentListView()
{
ListView lv = null;
DataTemplate fileListViewTemplate = base.FindResource("FileListViewTemplate")
as DataTemplate;
DataTemplate thumbnailViewTemplate = base.FindResource("ThumbnailViewTemplate")
as DataTemplate;
ContentPresenter contentPresenter = VisualTreeHelper.GetChild(this.MyContentControl, 0)
as ContentPresenter;
try
{
lv = fileListViewTemplate.FindName("FileListView", contentPresenter)
as ListView;
}
catch (Exception)
{
lv = thumbnailViewTemplate.FindName("ThumbnailView", contentPresenter)
as ListView;
}
return lv;
}
If CheckBox is noted, then I want to see ThumbnailView, otherwise I want to see FileListView. And sometime I want to get current list view from code behind.
What am I doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当您在 DataTrigger 中指定
Value
时,您可能应该使用转换器将“true”从字符串转换为布尔值?may be you shoud use converter to convert "true" from string to bool when you specify the
Value
in your DataTrigger?