2017-12-18 127 views
0

我想爲窗口的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)); 
} 

,這只是一次更新:

+2

將資源聲明移至App.xaml中的Application.Resources。爲了將Window的DataContext傳遞給轉換器,使用帶MultiValueConverter的MultiBinding,其中一個子綁定只是''。 – Clemens

+0

不幸的是,我在VSTO/Winforms應用程序內部託管WPF控件,所以我無法在App.xaml中放置聲明 – buks

回答

1

...不幸的是我得到錯誤,我的價值轉換器尚未找到。

這是因爲資源被創建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中定義資源。

+0

謝謝,它部分工作(我需要刪除對AnomalyWindow的引用),但更新值有問題只更新一次值。我正在使用Path =「Ano」而不是使用Path =「。」,但使用「。」。它沒有工作。另一方面,我還將值綁定到該屬性,並且每次更改Ano值時都會更新textblock的值。我會將該代碼添加到根郵件。 – buks

+1

您是否嘗試將綁定的Mode屬性設置爲TwoWay併爲數據綁定的源屬性引發PropertyChanged事件? – mm8

+0

我之前沒有設置TwoWay模式,因爲至少在理論上我不需要它,單向模式在綁定到同一屬性的另一個控件中運行良好。但是,從某種奇怪的原因看來,雙向模式運行良好,值每次都會更新。謝謝。 – buks

相關問題