如何使用 VisualState AdaptiveTrigger 更改 ListView Item FontSize

2023-12-01

我正在使用视觉状态自适应触发器根据有效的屏幕分辨率更改页面外观。这很好用,但我无法让它适用于 ListView 项目。

我的 ListView 看起来像这样:

<ListView x:Name="listView" >
    <ListView.ItemTemplate>
        <DataTemplate>
                <TextBlock FontSize="20" Text="{Binding MyItem}"/>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

我可以在 XAML 中静态更改 TextBlock 字体大小。但我不知道如何在 VisualState setter 目标中引用它。作为自动生成的子项,我无法给 TextBlock 命名。我的视觉状态代码如下。我放了???我想在其中引用 ListView TextBlock 项 FontSize。

 <VisualStateManager.VisualStateGroups>
    <VisualStateGroup>
            <VisualState x:Name="NormalStateReadView">
                    <!-- VisualState to be triggered when window width is <720 effective pixels -->
                    <VisualState.StateTriggers>
                        <AdaptiveTrigger MinWindowWidth="0" />
                    </VisualState.StateTriggers>
                    <VisualState.Setters>
                        <Setter Target="???" Value="20" />
                    </VisualState.Setters>
                </VisualState>
    </VisualStateGroup>

    <VisualStateGroup>
            <VisualState x:Name="NormalStateReadView">
                    <!-- VisualState to be triggered when window width is >=720 effective pixels -->
                    <VisualState.StateTriggers>
                        <AdaptiveTrigger MinWindowWidth="720" />
                    </VisualState.StateTriggers>
                    <VisualState.Setters>
                        <Setter Target="???" Value="30" />
                    </VisualState.Setters>
                </VisualState>
    </VisualStateGroup>

任何帮助表示赞赏。


您需要将模板包装在UserControl让自适应触发器发挥作用;视觉状态也应该进入模板内部,并确保它位于第一个直接子级下(即Grid) 的UserControl。我看到您定义了两个视觉状态组,但实际上您只需要一个。

<ListView.ItemTemplate>
    <DataTemplate>
        <UserControl>
            <Grid>
                <VisualStateManager.VisualStateGroups>
                    <VisualStateGroup>
                        <VisualState x:Name="NarrowState">
                            <VisualState.StateTriggers>
                                <AdaptiveTrigger MinWindowWidth="0" />
                            </VisualState.StateTriggers>

                            <VisualState.Setters>
                                <Setter Target="Title.(TextBlock.FontSize)" Value="24" />
                            </VisualState.Setters>
                        </VisualState>

                        <VisualState x:Name="WideState">
                            <VisualState.StateTriggers>
                                <AdaptiveTrigger MinWindowWidth="720" />
                            </VisualState.StateTriggers>

                            <VisualState.Setters>
                                <Setter Target="Title.(TextBlock.FontSize)" Value="36" />
                            </VisualState.Setters>
                        </VisualState>
                    </VisualStateGroup>
                </VisualStateManager.VisualStateGroups>

                <TextBlock x:Name="Title" Text="{Binding Property1}" />
            </Grid>
        </UserControl>
    </DataTemplate>
</ListView.ItemTemplate>

Update

这是我认为更灵活的解决方案。它需要一些代码来设置,但结果是您获得干净、可重用且可读的代码。

这个想法是为了获得顶层的参考VisualStateGroup其定义为outside of the ListView,主要是在Page level.

然后,创建三个VisualStates (i.e. Narrow, Normal & Wide)并将它们附加到新的VisualStateGroup它应该属于第一个孩子UserControl.

一旦我们引用了这两个VisualStateGroups,我们可以监控顶级的CurrentStateChanged并相应地更新第二个中的状态。

上面的所有逻辑都可以用一个Behavior来自UWP XAML 行为 nuget 包.

一旦Behavior在适当的地方,你可以简单地定义你的内心状态:

<DataTemplate>
    <UserControl>
        <Interactivity:Interaction.Behaviors>
            <local:VisualStateInTemplateBehavior ParentVisualStateGroup="{Binding ElementName=AdaptiveVisualStates}">
                <local:VisualStateInTemplateBehavior.NarrowState>
                    <VisualState x:Name="Narrow">
                        <VisualState.Setters>
                            <Setter Target="Title.(TextBlock.FontSize)" Value="24" />
                        </VisualState.Setters>
                    </VisualState>
                </local:VisualStateInTemplateBehavior.NarrowState>

                <local:VisualStateInTemplateBehavior.NormalState>
                    <VisualState x:Name="Normal">
                        <VisualState.Setters>
                            <Setter Target="Title.(TextBlock.FontSize)" Value="32" />
                        </VisualState.Setters>
                    </VisualState>
                </local:VisualStateInTemplateBehavior.NormalState>

                <local:VisualStateInTemplateBehavior.WideState>
                    <VisualState x:Name="Wide">
                        <VisualState.Setters>
                            <Setter Target="Title.(TextBlock.FontSize)" Value="40" />
                        </VisualState.Setters>
                    </VisualState>
                </local:VisualStateInTemplateBehavior.WideState>
            </local:VisualStateInTemplateBehavior>
        </Interactivity:Interaction.Behaviors>

工作演示

enter image description here


请随意查看工作示例here.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 VisualState AdaptiveTrigger 更改 ListView Item FontSize 的相关文章

  • ASP.NET MVC 中的经典 ASP (C#)

    我有一个应用程序想要 最终 转换为 ASP NET MVC 我想要进行全面的服务升级 到 ASP NET 但想要使用当前的 ASP 内容来运行当前的功能 这样我就可以在对新框架进行增量升级的同时升级小部分 该站点严重依赖于不太成熟的 VB6
  • C#动态支持吗?

    看完之后这个帖子 https stackoverflow com questions 2674906 when should one use dynamic keyword in c sharp 4 0k和链接 我还有 2 个问题 问题 1
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • 如何识别 WPF 文本框中的 ValidationError 工具提示位置

    我添加了一个箭头来指示工具提示中的文本框 当文本框远离屏幕边缘时 这非常有效 但是当它靠近屏幕边缘时 工具提示位置发生变化 箭头显示在左侧 Here is the Image Correct as expected since TextBo
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 为什么我不应该对不是由 malloc() 分配的变量调用 free() ?

    我在某处读到 使用它是灾难性的free删除不是通过调用创建的对象malloc 这是真的 为什么 这是未定义的行为 永远不要尝试它 让我们看看当您尝试时会发生什么free 自动变量 堆管理器必须推断出如何获取内存块的所有权 为此 它要么必须使
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • 当前的 x86 架构是否支持非临时加载(来自“正常”内存)?

    我知道有关此主题的多个问题 但是 我没有看到任何明确的答案或任何基准测量 因此 我创建了一个处理两个整数数组的简单程序 第一个数组a非常大 64 MB 第二个数组b很小 无法放入 L1 缓存 程序迭代a并将其元素添加到相应的元素中b在模块化
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • 双精度类型二维多维数组的 pinvoke 编组作为 c# 和 c++ 之间的输入和输出

    我有以下我正在尝试解决的双物质类型的 2d 多维数组的 c 和 c pinvoke 编组 我已经查看了以下热门内容以获得我目前拥有的内容使用双精度数组进行 P Invoke 在 C 和 C 之间编组数据 https stackoverflo
  • WinRT 定时注销

    我正在开发一个 WinRT 应用程序 要求之一是应用程序应具有 定时注销 功能 这意味着在任何屏幕上 如果应用程序空闲了 10 分钟 应用程序应该注销并导航回主屏幕 显然 执行此操作的强力方法是在每个页面的每个网格上连接指针按下事件 并在触
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder

随机推荐

  • Cron 作业在特定时间启动和停止

    是否可以设置一个 cron 作业只在某些日子的晚上工作 例如每个月的第一天下午 3 点到晚上 9 点 我只想在晚上服务器负载较低时进行电子邮件营销活动 是否可以在某个时间运行一个 cron 作业并在某个时间停止它 您可以在晚上 9 点使用第
  • 如何在 Firebase 数据库中解压多层嵌套 JSON

    在我的应用程序中 我会定期有一个 JSON 主题 例如message 然后嵌套在其中是random ID 那么message文本作为随机 ID 内的字符串 但是 我需要破译多个级别的随机 ID 在 Firebase for Swift 中这
  • Cosmos DB 中是否支持使用 OData 进行分页?

    我可以看到通过 SQL API 访问 Azure 中的 Cosmos DB 时支持偏移 限制 但 OData 是否支持此功能 UPDATE 您可以下载my demo在github上 和本文 and 官方文件可以帮助你 我的存储帐户中的数据
  • 根据条件运行中间件 - Laravel

    我有一个中间件 用于检查请求中的特定标头参数并根据该参数发回响应 但我遇到的问题是我不希望这个中间件始终在我的控制器中的函数上运行 我希望如果函数中的条件为真 例如 存储函数 中间件就会运行 我怎样才能实现这个目标 在执行控制器操作之前调用
  • 向量化 seq 的优雅方法?

    尽管标题相似 但这不是同一个问题在 R 中向量化rep和seq 我的近期目标 给定一个向量 我想生成一个新向量 其中包含原始值以及旧值中每个值之间的规则间隔 这并不难 一种策略是使用更通用的函数 给定两个向量和一个指定的by间隔 使用相同的
  • git commit 的 --date 参数的格式是什么

    我需要覆盖 Git 的提交日期 所有文档都指向 date参数 但随后就留下了一个不知道适当格式的线索 我已经尝试了我能想到的所有排列 我得到 致命 日期格式无效 每一个的错误 Git 2 6 2015 年第 3 季度 添加了一个新选项 Se
  • jQuery 热键:防止 IE 运行自己的快捷方式,例如 Alt+H

    Using jQuery hotkeys I try to bind shortcuts like Alt H Alt C to some specific actions in my site The event propagation
  • 在python中,如何检查字符串是否同时包含大写和小写字母

    我看过另一个帖子 和我的问题类似 密码检查 Python 3 除了我的问题涉及检查密码是否同时包含大写和小写问题 我的代码如下 但是执行时它无法识别密码中的小写和大写字母 它只识别一种类型 我怎样才能让它识别这两种类型 还有一种更简单的方法
  • 推送通知后离子设置徽章

    我在用着IONIC框架 我想在收到推送通知后设置应用程序的徽章 当我的申请关闭时 有办法做到这一点吗 这是为其他遇到同样问题的人准备的 我相信您正在谈论使用从服务器收到的更新徽章编号使徽章可见 首先要在 Push 的 init 方法的代码中
  • 设置对话框列表中文本的样式

    我使用了这里给出的说明 http developer android com guide topics ui dialogs html AddingAList在对话框中创建列表 问题是我似乎没有找到将长文本包装在选项内的方法 请看下图 请告
  • V8如何管理对象实例的内存?

    http code google com apis v8 design html 上一页解释了 v8 团队用于实现快速属性访问的优化技术 但它的对象实例又如何呢 新属性可以随时添加到对象中 因此应该允许其大小增长 它是否只是简单地分配默认大
  • Android java.lang.ClassCastException:android.widget.RelativeLayout 无法转换为 android.widget.EditText

    当我点击一个按钮从一个活动转到另一个活动时 我在 Android 中遇到以下异常 我是 Android 开发新手 所以这可能不是最聪明的问题 java lang ClassCastException android widget Relat
  • 请求如何确定响应的编码?

    怎样才能有回应apparent encoding属性不正确 我有下面的代码片段 演示了我的问题 import requests url https item jd com 100000177760 html r requests get u
  • 将单元测试添加到现有的 ASP.NET Web 表单应用程序

    我有一个现有的 asp net webforms 应用程序 我想添加一些单元测试 但不确定具体如何进行 该应用程序是数据库驱动的功能 我想您可以将其与高级论坛进行比较 逻辑 数据访问和表示大部分是分开的 我应该测试什么方法 如何处理数据库和
  • VSCode TypeScript Intellisense 不工作

    从字面上看 我在这里拔掉了我的头发 Mac 上的 VSCode 1 6 0 Typescript 2 0 2 但我也尝试过 2 0 0 我尝试过以 es5 es6 为目标 无论是否有 commonjs 模块目标 我无法获取项目本地其他文件的
  • Prolog:停止条件?

    这是一个非常简单的 Prolog 知识库 spouse bill cheryl married X Y spouse X Y married X Y spouse Y X 我运行了以下查询 请注意 有时答案是正确的名称 仅 但有时答案是正确
  • PHP 语法错误 T_ENCAPSED_AND_WHITESPACE

    我开始学习 php 基础知识 但在理解如何将代码与字符串混合在一起时遇到一些问题 我发现了一种很棒且有用的样式来打印字符串块 但我不知道名称 也无法找到示例 下面的代码返回错误 解析错误 语法错误 意外的 T ENCAPSED AND WH
  • 如何使用 C# 以编程方式创建 VC++ 项目?

    我想用C 创建一个VC 项目 我看到这个MSDN 文章关于创造C and VB console application projects 但是VC 项目怎么办呢 ADD 1 我遇到了与下面的线程完全相同的问题 它的解决方案是操纵原始XML
  • Div 高度 100% 并扩展以适合内容 [重复]

    这个问题在这里已经有答案了 我的页面上有一个 div 元素 其高度设置为 100 身体的高度也设置为 100 内部 div 有背景等 并且与正文背景不同 这适用于使 div 高度为浏览器屏幕高度的 100 但问题是该 div 内的内容垂直延
  • 如何使用 VisualState AdaptiveTrigger 更改 ListView Item FontSize

    我正在使用视觉状态自适应触发器根据有效的屏幕分辨率更改页面外观 这很好用 但我无法让它适用于 ListView 项目 我的 ListView 看起来像这样