2010-04-06 2 views
7

나는 게임 데스크를 만들고 있습니다. 필자는 부착 된 속성으로 필드 크기 (한 필드는 정사각형 임)를 지정하고 2x2 행렬을 그리는 ViewPort의이 데이터 설정 값 (타일 모드는 나머지 게임 데스크를 수행함)을 지정하려고했습니다.변환기를 사용하여 TemplateBinding - 무엇이 잘못 되었습니까?

바인딩이 작동하지 않아서 무엇이 잘못 되었습니까?

내가하고 싶은 행동 XAML에서

테스트 라인 :

<DrawingBrush Viewport="0,0,100,100" ViewportUnits="Absolute" TileMode="None"> 

게임 데스크가 DrawingPaint의이 샘플을 기반으로합니다 http://msdn.microsoft.com/en-us/library/aa970904.aspx (이미지가 여기에있다)

XAML :

<Window x:Class="Sokoban.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:Sokoban" 
    Title="Window1" Height="559" Width="419"> 
    <Window.Resources> 
     <local:FieldSizeToRectConverter x:Key="fieldSizeConverter" /> 
     <Style x:Key="GameDesk" TargetType="{x:Type Rectangle}"> 
      <Setter Property="local:GameDeskProperties.FieldSize" Value="50" /> 
      <Setter Property="Fill"> 
       <Setter.Value> 
        <!--<DrawingBrush Viewport="0,0,100,100" ViewportUnits="Absolute" TileMode="None">--> 
        <DrawingBrush Viewport="{TemplateBinding local:GameDeskProperties.FieldSize, Converter={StaticResource fieldSizeConverter}}" ViewportUnits="Absolute" TileMode="None"> 
         <DrawingBrush.Drawing> 
          <DrawingGroup> 
           <GeometryDrawing Brush="CornflowerBlue"> 
            <GeometryDrawing.Geometry> 
             <RectangleGeometry Rect="0,0,100,100" /> 
            </GeometryDrawing.Geometry> 
           </GeometryDrawing> 

           <GeometryDrawing Brush="Azure"> 
            <GeometryDrawing.Geometry> 
             <GeometryGroup> 
              <RectangleGeometry Rect="0,0,50,50" /> 
              <RectangleGeometry Rect="50,50,50,50" /> 
             </GeometryGroup> 
            </GeometryDrawing.Geometry> 
           </GeometryDrawing> 
          </DrawingGroup> 
         </DrawingBrush.Drawing> 
        </DrawingBrush> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Window.Resources> 

    <StackPanel> 
     <Rectangle Style="{StaticResource GameDesk}" Width="300" Height="150" />   
    </StackPanel> 
</Window> 

변환기 및 재산 정의 :

,738,867,321 0

답변

11

TemplateBindings은 템플릿 화되는 컨트롤 (ControlTemplate)에 정의 된 종속성 속성에 대해서만 작동합니다. 당신은 (또한, 연결된 속성은 바인딩에 사용되는 괄호가 필요)를 RelativeSourceAncestorType의와 Binding가이 약을 전환 할 필요가 아니었다으로

편집에서, RelativeSource 바인딩 업데이트

... 
<DrawingBrush Viewport="{Binding Path=(local:GameDeskProperties.FieldSize), Converter={StaticResource fieldSizeConverter}, RelativeSource={RelativeSource AncestorType={x:Type Rectangle}}}" 
... 
ControlTemplate 안에 정의됩니다.

+0

Visual Studio의 출력 창에서이 오류를 발견했습니다. System.Windows.Data 오류 : 2 : 대상 요소에 대해 FrameworkElement 또는 FrameworkContentElement를 찾을 수 없습니다. BindingExpression : Path = (0); DataItem = null; 대상 요소는 'DrawingBrush'(HashCode = 35191196)입니다. 대상 속성 'Viewport'(유형 'Rect') –

+0

죄송합니다. 설정 한 속성을 자세히 보지 않았습니다. 실제로 작동하도록 답변을 업데이트했습니다. –

+0

감사합니다. 이전 예제에서 알았습니다. –

관련 문제