是否可以使用值转换器窗口属性?

我想为窗口的Top和Left属性绑定值。我需要使用valueconverter和valueconverter参数(具体来说:我需要我的窗口的datacontext),不幸的是我得到错误,我的价值转换器尚未找到。是否可以使用值转换器窗口属性?

<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>

编辑,以更新值,下面的部分问题效果很好:背后

   <TextBlock Grid.Column="1" Text="{Binding Ano.Name, Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"/> 

代码:

public Anomaly Ano 

{

get { return _ano; }

set

{

_ano = value;

NotifyPropertyChanged();

}

}

public event PropertyChangedEventHandler PropertyChanged;

private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")

{

PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

}

,这只是一次更新:

回答:

...不幸的是我得到错误,我的价值转换器尚未找到。

这是因为资源被创建LeftTop属性设置。

您可以通过使用元素语法已创建的资源后,绑定到属性解决这个问题:

<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>

的顺序问题。另一种选择是按照@Clements的建议在App.xaml中定义资源。

回答:

http://www.thejoyofcode.com/WPF_Quick_Tip_Converters_as_MarkupExtensions.aspx

如果你看一下这个职位的V3部分,你会发现这个一个不错的简单优雅的解决方案,它可以让你做你想做的是这样的:

Top="{Binding ., Converter={local:MyTopConverter}, ConverterParameter={x:Reference Name=AnomalyWindow}}" 

没有需要在里面定义它。资源在任何地方。

以上是 是否可以使用值转换器窗口属性? 的全部内容, 来源链接: utcz.com/qa/262464.html

回到顶部