Как связать управляющее свойство с другим свойством окна? - PullRequest
1 голос
/ 27 октября 2011

У меня есть окно, в котором есть прямоугольник.Я хочу, чтобы его заливка была градиентной остановкой для другой заливки прямоугольника, но в другом окне.Окно «источник» определяется как:

<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();
        }

I 'Я только прячусь и показываю это, не закрываясь наверняка.Как правильно его связать?

1 Ответ

1 голос
/ 27 октября 2011

Вы должны иметь свойство SelectedBrush, выставленное на вашем MainWindow, и вам просто нужно привязать цвет этой кисти, используя RelativeSource. Итак, это подойдет вам -

<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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...