如何从 Windows 应用商店应用程序的隐藏代码绑定到 C# 中的自定义附加属性?

2023-12-24

我有一个我定义的附加属性。

namespace Controls
{
public class StateManager : DependencyObject
{
    public static string GetVisualState(DependencyObject obj)
    {
        return (string)obj.GetValue(VisualStateProperty);
    }

    public static void SetVisualState(DependencyObject obj, string value)
    {
        obj.SetValue(VisualStateProperty, value);
    }

    // Using a DependencyProperty as the backing store for VisualStateProperty.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty VisualStateProperty =
        DependencyProperty.RegisterAttached("VisualState", typeof(string), typeof(StateManager),
        new PropertyMetadata(null,
            (s, e) => {
                var stateName = (string)e.NewValue;
                var ctrl = s as Control;
                if (ctrl == null) throw new InvalidCastException("You can only attach VisualState properties to Controls");

                if (!string.IsNullOrEmpty(stateName))
                    VisualStateManager.GoToState(ctrl, stateName, true);
            }));
}
}

我可以像这样在 XAML 中绑定到此属性:

<controls:TitleStrip
    controls:StateManager.VisualState=
          "{Binding (controls:StateManager.VisualState), ElementName=pageRoot}" 
    Grid.Column="1"/>

现在,我需要在代码后面动态创建到同一属性的绑定,所以我尝试了以下方法:

var pp = new PropertyPath("(controls:StateManager.VisualState)");
var binding = new Binding() { Path= pp, Source=this };
BindingOperations.SetBinding(ct, StateManager.VisualStateProperty, binding);

不幸的是,设置绑定的 Path 属性会引发 ArgumentException,指出:“值不在预期范围内。”

相反,如果我用“(Grid.Row)”替换我的属性,则不会引发异常。


对 Windows 10 的进一步调查表明,如果尝试将附加属性 Controls.StateManager.VisualState 绑定到控件 ct 上同名的附加属性上,这似乎可以在 C# 代码隐藏中工作:

string bindingxaml =
@"<ResourceDictionary
xmlns:controls=""using:Controls""
xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""
>
<Binding x:Key=""binding"" Path=""(controls:StateManager.VisualState)"" />
</ResourceDictionary>";

ResourceDictionary dict = XamlReader.Load(bindingxaml) as ResourceDictionary;
Binding binding = dict["binding"] as Binding;
binding.Source = this;
BindingOperations.SetBinding(ct, StateManager.VisualStateProperty, binding);

奇怪的是,如果您不将其包含在 ResourceDictionary 中,并尝试将 Binding 对象创建为唯一的子对象,则会引发异常。

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

如何从 Windows 应用商店应用程序的隐藏代码绑定到 C# 中的自定义附加属性? 的相关文章

随机推荐

  • 如何将位图调整为最大可用尺寸?

    我有非常大的位图图像 我的来源 BitmapFactory Options o new BitmapFactory Options o inJustDecodeBounds true BitmapFactory decodeStream n
  • Oracle:将两个不同的查询合并为一个,LIKE & IN

    我需要实现一个搜索查询 其中我们对数据库 oracle 中的单个列有多个过滤器 值 但是这些多个过滤器 值 是LIKE查询参数 我不确定我是否使用心中的方法预见到了正确的结果 我想要的东西应该像这样 departmentname IN LI
  • 如何使用 UTF8 读取 mysqldump?

    我正在尝试使用命令进行 mysql 转储 mysqldump u xxxx p dbxxx gt xxxx270613 sql 使用 UTF8 获取 mysqldump 的命令是什么 您可以使用以下内容 mysqldump u userna
  • 如何以编程方式设置 iOS 13 字形[重复]

    这个问题在这里已经有答案了 从 iOS 13 开始 Apple 提供了一堆字形 可以used https developer apple com design human interface guidelines sf symbols ov
  • Primefaces 惰性 datascroller 调用加载两次

    我正在尝试将 Datascroller 与 LazyDataModel 一起使用 并且惰性数据模型的加载方法被调用两次 除了认为多次调用加载方法 这可能会执行昂贵的服务器 数据库往返 不太好之外 因为我的惰性数据模型不是幂等的 也就是说 在
  • 用于检查 EC2 实例限制的 API?

    我广泛使用 EC2 实例来测试分布式系统 不幸的是 有时我会达到运行实例的限制 从而导致整个部署失败 我捕获了适当的异常 但我宁愿避免整个部署 也不愿在启动多个实例后失败 为了避免这种情况 我想进行一次飞行前检查 number of run
  • 从单元格中提取最后一个子字符串

    我在一栏中有名字 我需要将该列中的姓氏拆分到另一列中 姓氏从右侧以空格分隔 单元格中的内容A2 Alistair Stevens我在单元格中输入了公式B2 我需要 Stevens 在细胞内B2 我尝试使用以下公式 RIGHT A2 FIND
  • 用于匹配 C++ 字符串常量的正则表达式

    我目前正在开发 C 预处理器 我需要将字符串常量与超过 0 个字母相匹配 如下所示 hey I m a string 我目前正在与此合作 但它在我的一个测试用例上失败了 测试用例 std cout lt lt hello lt lt wor
  • Python 是否有一个“安全”子集可用作嵌入式脚本语言?

    在我创建的许多 Python 应用程序中 我经常创建简单的模块 只包含用作配置文件的常量 此外 因为配置文件实际上是一个 Python 代码文件 所以我可以添加简单的逻辑来根据调试级别等更改变量 虽然这对于内部应用程序非常有效 但我对将此类
  • 使用 form_for 在 Ruby on Rails 中通过 check_box 值传递 id

    我有两个控制器project controller rb and service controller rb 我有一个领域Project命名为service id 当我创建项目时 值service id默认情况下保留为 null 所以现在我
  • node_modules/@types/babel _template/index.d.ts :16:28 - 错误 TS2583:找不到名称“Set”

    我跟着本文 https itnext io step by step building and publishing an npm typescript package 44fe7164964c设置 TypeScript NPM 包 我第一
  • 缺少 iOS 发行版签名身份

    我错误地从 Mac 中删除了所有配置文件 Library Mobile Device Provisioning Profiles 现在 无论我做什么 Xcode 都会给我这个错误 缺少 iOS 发行版签名身份 我怎样才能解决这个问题 这与过
  • Android - 白标应用程序

    NOTE 这是一个老问题 相应的旧的赞成答案可能不相关 请参阅有关构建变体 又名应用程序风味 的新答案 我有一个关于发布到市场的问题 公司 X 为公司 A 和 B 提供类似的服务 并且 A 和 B 都希望在市场上有一个应用程序 X 公司只想
  • CMD 指令中是否允许使用 Docker ARG

    我有一个 Dockerfile 其中ARG用于CMD操作说明 ARG MASTER NAME CMD spark submit deploy mode client master MASTER URL arg 通过 docker compo
  • 电容器存储或科尔多瓦存储

    我正在使用 ionic v5 开发 PWA 应用程序 我需要离线保存一些内容以呈现给用户 我正在考虑使用 Capacitor 将我的 Web 应用程序发布到本机应用程序中作为 Cordova 的替代方案 但数据存储是我的应用程序的一个重要点
  • UIDatePicker 替代 tvOS?

    由于 UIDatePicker 在 tvOS 中不可用 那么使用什么来向用户询问日期 时间呢 是否有一个新的类可以替代UIDatePicker Thanks 由于 Apple 没有为 tvOS 提供日期选择器 因此没有标准解决方案 然而 一
  • 使用 mysqli bind_param 插入多行记录?

    我这里有一个使用 mysql 查询的代码 N count fullname for i 0 i lt N i mysql query INSERT INTO famcomp fullname fage frel fcivil fedu fo
  • 对于小 DIV 尺寸,为什么此 SVG 不适合其父 DIV 内部?

    我的期望是三角形应该位于容器 div 内 对于宽度大于 14 像素左右的情况 这可以按预期工作 但对于较小的 div 尺寸 SVG 会降低 div style width 9px height 9px background color re
  • 如何让谷歌地图信息窗口调整大小以适合放置在其中的内容?

    我一直在尝试使用 Google Maps API 但我在使用 InfoWindow 时遇到了麻烦 它似乎总是太小 无法容纳我放置在其中的内容 因此我的内容溢出到 InfoWindow 之外并溢出到 InfoWindow 上 地图 InfoW
  • 如何从 Windows 应用商店应用程序的隐藏代码绑定到 C# 中的自定义附加属性?

    我有一个我定义的附加属性 namespace Controls public class StateManager DependencyObject public static string GetVisualState Dependenc