UserControl (DiagramControl という名前) に取り組んでいますが、問題があります。UserControl のコードは次のとおりです。
<UserControl>
<Border>
<Grid>
<ScrollViewer x:Name="DesignerScrollViewer" ... />
...
<s:ZoomBox x:Name="zoomBox"
ScrollViewer="{Binding ElementName=DesignerScrollViewer}"/>
</Grid>
</Border>
</UserControl>
ZoomBox (スクロールビューアー DP を持つ) を DesignerScrollViewer にバインドしています。ZoomBox と DesignerScrollViewer が同じ XAML ファイルにあるため、使用する方法は正常に機能するようになりました。
ただし、私がやりたいことは、コントロールから ZoomBox を削除し、コントロールを使用するウィンドウで定義することです。たとえば、次のようなものです。
<Grid>
<s:DiagramControl x:Name="DC" ... />
...
<s:ZoomBox ScrollViewer={Binding ElementName=DC,Path=DesignerScrollViewer}/>
</Grid>
これを試しましたが、うまくいきません。必要なバインディングを実行するにはどうすればよいですか?
アップデート:
私は自分が何をする必要があるかを理解しました。ScrollViewer DP を DiagramControl に追加し、DesignerScrollViewer のレイアウトが更新されたときに更新するようにしました。したがって、以下は私のDiagramControlコードビハインドに入りました:
public static readonly DependencyProperty ScrollViewerProperty =
DependencyProperty.Register("ScrollViewer", typeof(ScrollViewer), typeof(DiagramControl), new UIPropertyMetadata(null, ScrollViewer_PropertyChanged));
public ScrollViewer ScrollViewer
{
get { return (ScrollViewer)GetValue(ScrollViewerProperty); }
set { SetValue(ScrollViewerProperty, value); }
}
private static void ScrollViewer_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
}
private void DesignerScrollViewer_LayoutUpdated(object sender, EventArgs e)
{
ScrollViewer = DesignerScrollViewer;
}
ScrollViewer DP に更新ソースがあるので、DiagramControl を使用してウィンドウからそれにバインドできました。これが将来誰かに役立つことを願っています。