C# 如何将绑定标记扩展从内联语法转换为元素语法?

C# 如何将绑定标记扩展从内联语法转换为元素语法?,c#,.net,wpf,xaml,multibinding,C#,.net,Wpf,Xaml,Multibinding,我是一个完全的.NET/C#nublet。我继承了一些用XAML定义窗口UI的代码,并尝试与一些现有的XML垃圾接口。这可能是一个非常简单的问题;我只是不知道用谷歌搜索什么 我有一个基于布尔值的文本框,我想禁用它。我可以使用以下代码执行此操作: 清单A: <TextBox x:Name="ServerNameTextBox" ... IsEnabled="{Binding ServerName.Editable}" /> 当我想基于一个变量和一个复选框时,问题就来了。我已经读过

我是一个完全的.NET/C#nublet。我继承了一些用XAML定义窗口UI的代码,并尝试与一些现有的XML垃圾接口。这可能是一个非常简单的问题;我只是不知道用谷歌搜索什么

我有一个基于布尔值的文本框,我想禁用它。我可以使用以下代码执行此操作:

清单A:

<TextBox x:Name="ServerNameTextBox" ... IsEnabled="{Binding ServerName.Editable}" />

当我想基于一个变量和一个复选框时,问题就来了。我已经读过关于IMultiValueConverter的文章,并为此编写了一个,但我不确定如何指定绑定,因为格式会发生变化

清单B:

<TextBox x:Name="ServerNameTextBox" ... >
    <TextBox.IsEnabled>
        <Binding ElementName="CheckBoxServerNameEnabled" Path="IsChecked" />
        <Binding ??? />
     </TextBox.IsEnabled>
</TextBox>

为了做出与第一行相同的参考,问号中需要加什么?告诉我清单A中使用的绑定类型是什么,这给了我额外的好处


谢谢

你就快到了。检查一下,你就快到了。检查
{Binding ServerName.Editable}
是否()等同于
{Binding Path=ServerName.Editable}

所以在您的
多绑定中

<MultiBinding Converter="...">
    <Binding ElementName="CheckBoxServerNameEnabled" Path="IsChecked"/>
    <Binding Path="ServerName.Editable"/>
</MultiBinding>


在传递给构造函数的未命名参数中,
Binding
有一个值。

{Binding ServerName.Editable}
是()等价于
{Binding Path=ServerName.Editable}

所以在您的
多绑定中

<MultiBinding Converter="...">
    <Binding ElementName="CheckBoxServerNameEnabled" Path="IsChecked"/>
    <Binding Path="ServerName.Editable"/>
</MultiBinding>


在传递给构造函数的未命名参数中,
Binding
有一个.

因为标记扩展类是从
Binding
派生的,所以我能够替换XML元素标记。例如:

之前:

   <local:FolderBox Text="{xset:XSettings Folders.BuildRoot}"/>

因为标记扩展类是从
绑定派生的
,所以我能够替换XML元素标记。例如:

之前:

   <local:FolderBox Text="{xset:XSettings Folders.BuildRoot}"/>

如何将参数传递到标记扩展构造函数中?或者,标记扩展参数是如何设置的?@JRo:这都是幕后的反射,你到底想知道什么,为什么?例如,您的目标/问题是什么?从您的示例中,我看不到如何将参数传递给标记扩展,因为所有属性都应用于
绑定
基类。我(不太熟练地)玩弄了
元素和子元素,并在下面用我的发现发布了一个答案。简而言之,标记扩展类可以用作
元素(例如
)。那么扩展的参数只是XML元素上的属性。@JRo:因为标记扩展可以以元素形式出现,所以我总是确保它们只能用于属性赋值,并且所有非空构造函数都是可选的。这很有意义,尤其是在这种上下文中。感谢您提供的透视图。如何将参数传递到标记扩展构造函数中?或者,标记扩展参数是如何设置的?@JRo:这都是幕后的反射,你到底想知道什么,为什么?例如,您的目标/问题是什么?从您的示例中,我看不到如何将参数传递给标记扩展,因为所有属性都应用于
绑定
基类。我(不太熟练地)玩弄了
元素和子元素,并在下面用我的发现发布了一个答案。简而言之,标记扩展类可以用作
元素(例如
)。那么扩展的参数只是XML元素上的属性。@JRo:因为标记扩展可以以元素形式出现,所以我总是确保它们只能用于属性赋值,并且所有非空构造函数都是可选的。这很有意义,尤其是在这种上下文中。谢谢你的观点。