내 수업에 캔버스 속성이 있는데 xaml의 캔버스에 바인딩 할 수 있는지 궁금합니다.캔버스에 바인딩
어떻게 데이터 바인딩이 캔버스에서 작동합니까?
<Canvas ItemSource="{Binding ClassCanvas}" />
내 수업에 캔버스 속성이 있는데 xaml의 캔버스에 바인딩 할 수 있는지 궁금합니다.캔버스에 바인딩
어떻게 데이터 바인딩이 캔버스에서 작동합니까?
<Canvas ItemSource="{Binding ClassCanvas}" />
당신이 당신의 캔버스 당신이 쓸 수있는 하나의 항목으로 클래스의 전체 캔버스를 포함하는 XAML에 정의하려면 다음
<Canvas>
<ContentPresenter Content="{Binding ClassCanvas}" />
... other items here ...
</Canvas>
당신은 당신의 캔버스로 모두 같은 UiElements의를 포함하는 XAML에 정의하려면 클래스에 정의 된 Canvas는 UIElement가 하나의 UIElement 부모 만 가질 수 있기 때문에 불가능합니다. 따라서 클래스에 정의 된 Canvas가 지정된 UIElement의 부모이면 XAML에 정의 된 Canvas를 사용할 수 없습니다.
당신이 당신의 클래스에 정의 된 캔버스의 각 UIElement에서 데이터를 표시하도록 캔버스, 당신은 캔버스 패널과 DataTemplate을 가진 ItemsControl을 사용하여이 작업을 수행 할 수 원하는 경우 :
<ItemsControl ItemsSource="{Binding ClassCanvas.Children}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl>
<ItemsControl.ItemsContainerStyle>
<Style>
<Setter Property="Canvas.Left" Value="{Binding (Canvas.Left)}" />
<Setter Property="Canvas.Left" Value="{Binding (Canvas.Top)}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
... display of UIElement here, either using VisualBrush or custom display
</ControlTemplate>
<Setter.Value>
</Setter>
</Style>
</ItemsControl.ItemsContainerStyle>
</ItemsControl>
참고이 코드는 것 INotifyCollectionChanged 컬렉션이 아니기 때문에 Children 속성을 한 번만 검사합니다.
Canvas.Top 및 Canvas.Left 속성이 설정된 UIElements 컬렉션이 포함 된 클래스의 속성에 바인딩하려면 컨테이너가 Canvas 대신 ObservableCollection 인 경우 쉽게 수행 할 수 있습니다.
Canvas 클래스는 데이터 영역 내에서 사용하도록 설계된 적이 없었습니다. ObservableCollection을 사용하여보기의 일부로 Canvas 만 사용하도록 전환하는 것이 좋습니다.
자세한 내용을 입력 해주세요. – SLaks
내 질문이 업데이트되었습니다. – Robert