簡體   English   中英

如何將控件屬性綁定到另一個窗口屬性?

[英]How bind control property to a another window property?

我有一個窗口,其中有一個矩形。 我希望它的填充是另一個矩形填充的gradientstop,但在其他窗口上。 “源”窗口定義為:

<Window x:Class="WPF1.ColorSelectorWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:my="clr-namespace:WPF1"
    x:Name="colorSelectorWindow"
    Title="ColorSelectorWindow" Height="281" Width="540">

有一個矩形

    <Rectangle HorizontalAlignment="Left" Margin="40,120,0,41" Stroke="Black" Width="100" Name="ColorPicker">
        <Rectangle.Fill>
            <SolidColorBrush>
                <SolidColorBrush.Color>
                    ...
                </SolidColorBrush.Color>
            </SolidColorBrush>
        </Rectangle.Fill>
    </Rectangle>

和一個屬性:

public partial class ColorSelectorWindow : Window
{
    public Brush SelectedBrush
    {
        get
        {
            return ColorPicker.Fill;
        }
    }
}

現在,在目標窗口中,我定義一個矩形:

    <Rectangle Height="213" HorizontalAlignment="Left" Margin="27,8,0,0" Name="rectangle1" VerticalAlignment="Top" Width="25" Grid.Row="1">
        <Rectangle.Fill>
            <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                <GradientStop Offset="0" Color="Blue" />
                <GradientStop Offset="1" Color="{Binding ElementName=colorWindowSelector, Path=SelectedBrush, Converter={StaticResource BrushToColorConverter}}" />
            </LinearGradientBrush>
        </Rectangle.Fill>
    </Rectangle>

其中BrushToColorConverter將“畫筆”轉換為“顏色”。 這是行不通的,我也不知道為什么,看來我在處理“源”窗口時遇到了問題。我正在目標窗口構造函數中構建它:

        public MainWindow()
        {
            colorWindow = new ColorSelectorWindow();
            colorWindow.Name = "colorWindowSelector";
            colorWindow.Hide();
            InitializeComponent();
        }

我只是隱藏並顯示它,不能確定關閉。 如何正確綁定?

您需要在MainWindow上公開屬性SelectedBrush,並且只需要使用RelativeSource綁定到此Brush的顏色即可。 因此,這將為您做-

<Rectangle Height="213" HorizontalAlignment="Left" Margin="27,8,0,0" Name="rectangle1" VerticalAlignment="Top" Width="25" Grid.Row="1">
   <Rectangle.Fill>
     <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
        <GradientStop Offset="0" Color="Blue" />
        <GradientStop Offset="1" Color="{Binding Path=Owner.SelectedBrush, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType =Window} Converter={StaticResource BrushToColorConverter}}" />
     </LinearGradientBrush>
   </Rectangle.Fill>
</Rectangle>

但是請確保在創建窗口時,將其所有者設置為MainWindow-

public MainWindow()
{
   InitializeComponent();
   colorWindow = new ColorSelectorWindow();
   colorWindow.Name = "colorWindowSelector";
   colorWindow.Owner = this;
   colorWindow.Hide();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM