C# 是否可以对窗口属性使用值转换器?
我想为窗口的顶部和左侧属性绑定值。我需要使用valueconverter和valueconverterparameter(确切地说:我需要窗口的datacontext),不幸的是,我遇到了一个错误,没有找到我的值转换器C# 是否可以对窗口属性使用值转换器?,c#,wpf,window,C#,Wpf,Window,我想为窗口的顶部和左侧属性绑定值。我需要使用valueconverter和valueconverterparameter(确切地说:我需要窗口的datacontext),不幸的是,我遇到了一个错误,没有找到我的值转换器 <Window x:Class="Proofing_Tool.wwwww" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://s
<Window x:Class="Proofing_Tool.wwwww"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Proofing_Tool"
xmlns:conv="clr-namespace:Proofing_Tool.ValueConverters"
mc:Ignorable="d"
Height="180"
MinHeight="50"
Width="340"
SizeToContent="Height"
AllowsTransparency="True"
WindowStyle="None"
Background="{x:Null}"
OpacityMask="White"
Name="AnomalyWindow"
Title="Anomaly Details"
ResizeMode="NoResize"
Left="{Binding ., Converter={StaticResource ValueConverterAnomalyToLeft},ConverterParameter={x:Reference Name=AnomalyWindow}}"
Top="{Binding ., Converter={StaticResource ValueConverterAnomalyToTop},ConverterParameter={x:Reference Name=AnomalyWindow}}">
<Window.Resources>
<conv:ValueConverterAnomalyToLeft x:Key="ValueConverterAnomalyToLeft" />
<conv:ValueConverterAnomalyToTop x:Key="ValueConverterAnomalyToTop" />
</Window.Resources>
仅更新一次的:
如果你看一下那篇文章的V3部分,你会发现一个很好的简单优雅的解决方案,它允许你像这样做你想做的事情:
Top="{Binding ., Converter={local:MyTopConverter}, ConverterParameter={x:Reference Name=AnomalyWindow}}"
无需在任何地方的资源中定义它。
如果你看一下那篇文章的V3部分,你会发现一个很好的简单优雅的解决方案,它允许你像这样做你想做的事情:
Top="{Binding ., Converter={local:MyTopConverter}, ConverterParameter={x:Reference Name=AnomalyWindow}}"
不需要在内部定义它。任何地方都可以使用资源
…不幸的是,我得到的错误是找不到我的值转换器
<Window x:Class="Proofing_Tool.wwwww"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Proofing_Tool"
xmlns:conv="clr-namespace:Proofing_Tool.ValueConverters"
mc:Ignorable="d"
Height="180"
MinHeight="50"
Width="340"
SizeToContent="Height"
AllowsTransparency="True"
WindowStyle="None"
Background="{x:Null}"
OpacityMask="White"
Name="AnomalyWindow"
Title="Anomaly Details"
ResizeMode="NoResize"
Left="{Binding ., Converter={StaticResource ValueConverterAnomalyToLeft},ConverterParameter={x:Reference Name=AnomalyWindow}}"
Top="{Binding ., Converter={StaticResource ValueConverterAnomalyToTop},ConverterParameter={x:Reference Name=AnomalyWindow}}">
<Window.Resources>
<conv:ValueConverterAnomalyToLeft x:Key="ValueConverterAnomalyToLeft" />
<conv:ValueConverterAnomalyToTop x:Key="ValueConverterAnomalyToTop" />
</Window.Resources>
这是因为资源是在设置了Left
和Top
属性之后创建的
您可以通过在创建资源后使用元素语法绑定到属性来解决此问题:
<Window x:Class="Proofing_Tool.wwwww"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Proofing_Tool"
xmlns:conv="clr-namespace:Proofing_Tool.ValueConverters"
mc:Ignorable="d"
Height="180"
MinHeight="50"
Width="340"
SizeToContent="Height"
AllowsTransparency="True"
WindowStyle="None"
Background="{x:Null}"
OpacityMask="White"
Name="AnomalyWindow"
Title="Anomaly Details"
ResizeMode="NoResize">
<Window.Resources>
<conv:ValueConverterAnomalyToLeft x:Key="ValueConverterAnomalyToLeft" />
<conv:ValueConverterAnomalyToTop x:Key="ValueConverterAnomalyToTop" />
</Window.Resources>
<Window.Left>
<Binding Path="." Converter="{StaticResource ValueConverterAnomalyToLeft}" ConverterParameter="{x:Reference Name=AnomalyWindow}" />
</Window.Left>
<Window.Top>
<Binding Path="." Converter="{StaticResource ValueConverterAnomalyToTop}" ConverterParameter="{x:Reference Name=AnomalyWindow}" />
</Window.Top>
</Window>
秩序很重要。另一个选项是在App.xaml
中定义资源
…不幸的是,我得到的错误是找不到我的值转换器
<Window x:Class="Proofing_Tool.wwwww"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Proofing_Tool"
xmlns:conv="clr-namespace:Proofing_Tool.ValueConverters"
mc:Ignorable="d"
Height="180"
MinHeight="50"
Width="340"
SizeToContent="Height"
AllowsTransparency="True"
WindowStyle="None"
Background="{x:Null}"
OpacityMask="White"
Name="AnomalyWindow"
Title="Anomaly Details"
ResizeMode="NoResize"
Left="{Binding ., Converter={StaticResource ValueConverterAnomalyToLeft},ConverterParameter={x:Reference Name=AnomalyWindow}}"
Top="{Binding ., Converter={StaticResource ValueConverterAnomalyToTop},ConverterParameter={x:Reference Name=AnomalyWindow}}">
<Window.Resources>
<conv:ValueConverterAnomalyToLeft x:Key="ValueConverterAnomalyToLeft" />
<conv:ValueConverterAnomalyToTop x:Key="ValueConverterAnomalyToTop" />
</Window.Resources>
这是因为资源是在设置了Left
和Top
属性之后创建的
您可以通过在创建资源后使用元素语法绑定到属性来解决此问题:
<Window x:Class="Proofing_Tool.wwwww"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Proofing_Tool"
xmlns:conv="clr-namespace:Proofing_Tool.ValueConverters"
mc:Ignorable="d"
Height="180"
MinHeight="50"
Width="340"
SizeToContent="Height"
AllowsTransparency="True"
WindowStyle="None"
Background="{x:Null}"
OpacityMask="White"
Name="AnomalyWindow"
Title="Anomaly Details"
ResizeMode="NoResize">
<Window.Resources>
<conv:ValueConverterAnomalyToLeft x:Key="ValueConverterAnomalyToLeft" />
<conv:ValueConverterAnomalyToTop x:Key="ValueConverterAnomalyToTop" />
</Window.Resources>
<Window.Left>
<Binding Path="." Converter="{StaticResource ValueConverterAnomalyToLeft}" ConverterParameter="{x:Reference Name=AnomalyWindow}" />
</Window.Left>
<Window.Top>
<Binding Path="." Converter="{StaticResource ValueConverterAnomalyToTop}" ConverterParameter="{x:Reference Name=AnomalyWindow}" />
</Window.Top>
</Window>
秩序很重要。另一个选项是在
App.xaml
中定义资源,将资源声明移动到App.xaml中的Application.resources。为了将窗口的DataContext传递给转换器,请使用带有多值转换器的多绑定,其中一个子绑定只是
。不幸的是,我在VSTO/Winforms app中托管WPF控件,因此无法将声明放在app.xaml中。请将资源声明移动到app.xaml中的Application.Resources。为了将窗口的DataContext传递给转换器,请使用带有多值转换器的多绑定,其中一个子绑定只是
。不幸的是,我在VSTO/Winforms应用中托管WPF控件,因此无法在应用中放置声明。谢谢,它部分工作(我需要删除对AnomalyWindow的引用),但更新值时出现问题,它只更新值一次。我现在使用Path=“Ano”而不是Path=“.”,但使用“.”它也不起作用。从另一方面来说,我也将值绑定到该属性,并且每次更改值时它都会更新textblock的值。我将把该代码添加到根帖子中。您是否尝试将绑定的Mode属性设置为TwoWay并引发数据绑定源属性的PropertyChanged事件?我之前没有设置woWay模式,因为,至少在理论上我不需要它,并且一种模式在绑定到同一属性的另一个控件中运行良好。但是,出于某种奇怪的原因,似乎双向模式运行良好,并且每次都会更新值。谢谢。谢谢,它部分工作(我需要删除对AnomalyWindow的引用),但更新值时出现问题,它只更新值一次。我现在使用Path=“Ano”而不是Path=“.”,但使用“”它也不起作用。从另一方面来说,我也将值绑定到该属性,并且每次更改值时它都会更新textblock的值。我将把该代码添加到根帖子中。您是否尝试将绑定的Mode属性设置为TwoWay并引发数据绑定源属性的PropertyChanged事件?我之前没有设置woWay模式,因为,至少在理论上我不需要它,而且一种模式在绑定到同一属性的另一个控件中工作得很好。但是,出于某种奇怪的原因,似乎TwoWay模式工作得很好,并且每次都会更新值。谢谢。