如何从 ControlTemplate 检索 VisualChild

2024-04-25

我在 .NET 3.5 SP1 中有一个 WPF 应用程序,它正在使用TabControl.
在那我们有TabItems,这反过来又有它们的Styles确定当前显示的项目。
假设我们有一个TabItem named Books, now Books将分为三个阶段的显示:
1.加载结果,
2. 显示结果,
3. 未显示任何结果 - 即未找到任何内容。

<TabControl>
    <TabItem Header="Books"/>
    <TabItem Header="DVD's"/>
    ...
</TavControl>

现在我有5个TabItems假设代表“DVD”、“蓝光”、“CD”、“书籍”和“漫画”。

<TabItem Header="Books">
    <Control>
        <Control.Resources>
            <Style TargetType="Control">
               <Setter Property="Template">
                   <Setter.Value>
                       <ControlTemplate TargetType="Control">
                           <ListView ItemsSource="{Binding Books}"/>
                       </ControlTemplate>
                   </Setter.Value>
               </Setter>
            <Style.Triggers>
                <!-- Assign different Visuals depending on the current state of the app, i.e. Loading, No results, results found
                <DataTrigger .../>
            </Style.Triggers>
            </Style>
        </Control.Resources>
    </Control>
</TabItem>

在下面TabItem我有一个TextBlock显示当前找到的结果数:

<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="Displaying {0} records for your Shop ({1})" Converter="{StaticResource tstMVC}">
            <Binding ElementName="Tc" Path="SelectedValue"/>
            <Binding Path="ShopId" FallbackValue="Liverpool"/>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>  

转换器可以让我检查传入的值MultiBinding.
ISSUE:
When user选择我想要显示的选项卡项目当前号码显示的项目数,但我找不到ListView in the Control,因为这是当前内容TabItem.
我已经尝试过 TabControl.SelectedItem、SelectedValue 但仍然找不到 Current ItemsSource.Count。
提前致谢


UPDATE:
我已经尝试了这两种解决方案,非常感谢@Sheridan 和@pushpraj!
不幸的是我没有使用它们中的任何一个,而是我在里面使用了ListViewTabItem然后使用以下代码访问它:

<TabControl Name="Tc">
    <TabItem><ListView ItemsSource="{Binding Books}"/></TabItem>
    ...
</TabControl>

<TextBlock Text="{Binding ElementName=Tc, Path=SelectedItem.Content.Items.Count}"/>

这样,每次用户选择不同的选项卡时,我的 TextBlock 的内容都会发生变化。
P.S.尽管如此,如果没有对这两个答案进行评估,我就不会这样做。


如果您的所有实体都有单独的集合类,您可以使用以下方法

为您的集合类定义数据模板

eg

<DataTemplate DataType="{x:Type l:BookCollection}">
    <ListView ItemsSource="{Binding}" />
</DataTemplate>

xaml

<TabControl x:Name="Tc">
    <TabItem Header="Books"
             Content="{Binding Books}" />
    <TabItem Header="DVD's"
             Content="{Binding DVDs}" />
</TabControl>

或者如果您没有单独的集合,则按如下方式使用 DataTemplate

<TabControl  x:Name="Tc">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <ListView ItemsSource="{Binding}" />
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabItem Header="Books"
             Content="{Binding Books}" />
    <TabItem Header="DVD's"
             Content="{Binding DVDs}" />
</TabControl>

那么获取所选选项卡的项目计数的绑定将是

<TextBlock Text="{Binding SelectedItem.Content.Count, ElementName=Tc}" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 ControlTemplate 检索 VisualChild 的相关文章

随机推荐

  • AWS S3 StringLike条件阻止对存储桶的请求

    我有以下 s3 IAM 政策 它的目的是允许我从存储桶内的 temp prod tests 位置复制文件或将文件放入下面的存储桶中 在策略中 我添加了 StringLike 条件 我希望该条件允许策略中的权限允许在对象前缀包含时进行复制和放
  • 使用多个参数多次调用傀儡定义的资源

    我有一个简单的木偶定义的资源 如下所示 define mything number device otherthing file place number ensure gt directory mount place number dev
  • 使用vuex时如何在typescript语法中使用mapState函数?

    我在与 vuex 集成的 vuejs 项目中使用 typescript 语法 我想使用 ts 文件中计算的 mapState 方法 但出现语法错误 目前我正在使用文档建议的计算函数语法 我的意思是 get counter return th
  • 为什么这段Java代码会触发ConcurrentModificationException?

    在循环的第一行中 我收到错误 但我不明白为什么 根据我的阅读 只有当我迭代一个集合并尝试同时修改它时 才会发生这种情况 但事实并非如此 在代码中 list属于类型ArrayList
  • 在 Spring 中,为什么 POJO 上的 CGLib 的行号会丢失?

    Spring MVC Web 应用程序 我有一个不带行号的堆栈跟踪 显示在底部 我认为这是由于 CGLib 在控制器上运行所致 但这对我来说很奇怪 实际的异常发生在ServerBatchRemoteRequestAcceptor 一个没有注
  • 使用 RCurl 登录 WordPress

    我想使用 R 的 RCurl 包登录 WordPress 网站 以便安装 WordPress 插件 可能在 WordPress 的某些选项页面上使用 postForm 由于该网站受密码保护 我请求您帮助如何验证我的 R 会话 我发现以下三个
  • AND 运算符不能与布尔值和字符串一起使用

    我有一个 LINQ2SQL 语句 其中使用两个条件 var query1 from r in dt Test where r ID 92 r Status I select r ID r Status I 但它给了我一个错误 即 AND 运
  • UITableView 具有不同的可选部分?

    我正在寻找一种 好 的方法来解决一些特殊要求 我有一个包含不同部分的 UITableView 例如 基础数据 关于我 兴趣 Images 基本数据始终包含值 但仍然存在可变行数 所有其他 类别 可以包含行 也可以为空 如果没有数据 则不应显
  • 获取比较指令的值

    据我了解 cmp 指令将设置标志寄存器中的一些位 然后 您可以使用 jle jnp 等指令基于这些指令进行分支 我想知道如何从比较中恢复整数值 示例 以下是有效的 c 语法 y x a gt 13 因此 a 与 13 进行比较 得到 tru
  • 如何将 dateTimePicker 值设置为 DateTime.MaxValue

    这会在运行时生成错误 dateTimePicker Value DateTime MaxValue 你不能 DateTimePicker 支持的最大日期为DateTimePicker MaximumDateTime http msdn mi
  • 如何在 C++ 中更改活动桌面壁纸

    你好 我想写一个小程序来更改 Windows 7 中的壁纸 我想使用以下代码 include windows h include wininet h include shlobj h include wchar h include
  • Python 中高效的逐元素函数计算

    我有以下优化问题 给定两个 np arraysX Y和一个函数K我想尽快计算矩阵关联 gram matrix 其中 i j th元素计算为K X i Y j 这里有一个使用嵌套 for 循环的实现 它被认为是解决此类问题最慢的 def pr
  • 设计邀请:可选择发送电子邮件

    在 devise invitable 中 您可以通过执行以下操作来邀请新用户 User invite email gt email protected cdn cgi l email protection name gt John Doe
  • 如何在运行时从java对象获取实例变量的行号

    我想在运行时查找 Java 文件中实例变量的行号 到目前为止我的理解 它可以通过java反射来完成 但不知道该怎么做 提前致谢 简短的回答 不可以 如果你想得到any运行时的行号信息 您首先必须确保您的类已编译并保留行号信息 如果您不拥有这
  • 拆分具有空格的字符串,除非它们包含在“引号”内?

    为了让事情变得简单 string streamR sr ReadLine sr Readline results in one two two 我希望能够将它们保存为两个不同的字符串 删除除引号之间的空格之外的所有空格 因此 我需要的是 s
  • Swagger WebApi 在构建时创建 json

    有什么方法可以在我的 Web api 的构建任务期间创建 swagger json 吗 我想使用 json 将其输入代码生成器并生成打字稿定义文件 非常欢迎任何帮助 我在用着虚张声势 AspNetCore Cli 注意 我使用的是 NET
  • PowerShell:导入模块,但没有可用的“ExportedCommands”

    当我使用 Import Module Name
  • Hive如何存储数据,什么是SerDe?

    当查询表时 SerDe 将将文件中的字节中的一行数据反序列化为 Hive 内部使用的对象来操作该行数据 执行 INSERT 或 CTAS 时 请参阅第 441 页上的 导入数据 表的 SerDe 将将 Hive 的一行数据的内部表示序列化为
  • React useState() 不同步更新值[重复]

    这个问题在这里已经有答案了 如果在设置值后立即调用 React useState 不会更新变量的值 我读过有关 useEffect 的内容 但并不真正知道这对于这个特定场景有何用处 完整代码 https codesandbox io s n
  • 如何从 ControlTemplate 检索 VisualChild

    我在 NET 3 5 SP1 中有一个 WPF 应用程序 它正在使用TabControl 在那我们有TabItems 这反过来又有它们的Styles确定当前显示的项目 假设我们有一个TabItem named Books now Books