3

우선 C# 및 XAML로 Windows 8 용 Windows Store 앱을 코딩하고 있습니다. GridView을 사용하여 그룹화 된 개체 모음을 표시하고 있습니다. 각 그룹은 연관된 항목이 표시된 단일 열로 표시됩니다.Canvas를 ItemsPanelTemplate 및 Binding Canvas.Top로 사용할 수 없습니다.

잘 작동하지만 각 열의 ItemsPanelCanvas 패널로 지정합니다.

<GroupStyle.Panel> 
    <ItemsPanelTemplate> 
     <Canvas /> 
    </ItemsPanelTemplate> 
</GroupStyle.Panel> 

은 지금 바로 XAML에서 정적 숫자로 Canvas.Top를 설정합니다. 이것은 예상대로 작동합니다.

<GridView.ItemContainerStyle> 
    <Style TargetType="GridViewItem"> 
     <Setter Property="Canvas.Top" Value="50" /> 
    </Style> 
</GridView.ItemContainerStyle> 

하지만 데이터 바인딩을 사용하면 작동하지 않습니다.

<Setter Property="Canvas.Top" Value="{Binding Distance}" /> 

2012 비주얼 스튜디오와 함께 윈도우 8 스토어 앱 개발에 스타일과 세터에 작동하지 바인딩합니까? 어떻게하면 Canvas.Top을 속성에서 각 항목에 대해 동적으로 설정할 수있는이 문제를 해결할 수 있습니까?

답변

0

스타일의 속성을 ViewModel에 바인딩 할 수없는 것 같습니다.
Canvas.Top은 일종의 attached-property입니다.
각 항목의 속성을 Canvas.Top, you can do it in code-behind으로 동적으로 변경하려는 경우.
GridViewItemCanvas을 추출한 다음 Top 속성을 설정합니다.

1

Silverlight 버전 5 이전과 마찬가지로 스타일 설정 기의 바인딩이 WinRT에서 지원되지 않습니다. ItemContainerStyle의 바인딩과 관련된 this answer을 참조하십시오 (일부 해결 된 속성으로 해결 방법이 제안 됨).

또는 항목 컨테이너가 생성 될 때 코드에서 속성 값/바인딩을 설정할 수 있습니다. GridView의 서브 클래스를 지정하고 ItemsControl.PrepareContainerForItemOverride과 같은 것을 재정의하면 항목 컨테이너에서 모델 항목으로 바인딩을 설정할 수 있습니다.