2011-10-27 4 views
1

私は窓があり、そこには長方形があります。その塗りつぶしを別の矩形塗りつぶしのグラデーション停止にしたいのですが、別のウィンドウで行います。 "ソース" ウィンドウが次のように定義されますコントロールプロパティを別のウィンドウプロパティにバインドする方法は?

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

さて、ターゲットウィンドウに、私は矩形を定義します:

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

とプロパティがあります

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

ここで、BrushToColorConver terはBrushをColorに変換します。これは動作していないと私はなぜ知らない、私がターゲットウィンドウのコンストラクタでそれを構築しています..私は、「ソース」ウィンドウというのアドレッシングに問題があるようだ:

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

私だけですそれを隠して見せて、必ずしも閉じないでください。それを正しくバインドするには?

+0

使用... http://stackoverflow.com/questions/7825379/handling-a-bubbling-event-raised-from-a-modal-dialog-in-main-window/7831973#7831973 –

答えて

1

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> 

をしかし、ウィンドウを作成するとき、あなたはその所有者がメインウィンドウに設定してください - - だから、これはあなたのために尽くします `OwnerWindow`財産へのバインディン

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

私はもう一方のプロパティを持つ必要がありますウィンドウ – deha

+0

同じウィンドウ内に矩形があるプロパティがある場合は、 :) Owner.SelectedBrushの代わりにSelectedBrushというバインディングパスを作成します。Ownerを設定する必要はありません。:) –

+0

はい、SelectedBrushはOwnedウィンドウではなくOwnedウィンドウにあります。ターゲット(MainWindow)から、私はColorSelectorWindow.SelectedBrushに対処する必要があります。あなたのソリューションは、MainWindow.SelectedBrushを探していて、私が探しているものでないColorSelectorWindowの長方形の塗りつぶしにバインドしています...またはsthを誤解しました – deha

関連する問題