2013-10-10 7 views
2

스타일에서 사용자 지정 컨트롤의 속성을 설정하는 방법을 알고 싶습니다.자식에서 부모 속성 설정

'SubstrateState'라는 dependencyproperty가있는 'Substrate'라는 토글 버튼을 기반으로하는 사용자 정의 컨트롤이 있습니다. 열거 형 값을 취합니다.

별도의 파일에는 컨트롤에 상황에 맞는 메뉴를 추가하는 스타일이 있습니다.

사용자가 상황에 맞는 메뉴에서 메뉴 항목 중 하나를 누르면 속성이 미리 정의 된 값으로 트리거되기를 원합니다. 나는이 프로그램을 실행할 때

<Style TargetType="{x:Type local:Substrate}"> 
<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type local:Substrate}"> 
      <Grid> 
       <Grid.ContextMenu> 
        <ContextMenu Background="#212121"> 
         <MenuItem Header="Aborted"> 
          <MenuItem.Style> 
           <Style TargetType="MenuItem"> 
            <Style.Triggers> 
             <Trigger Property="IsPressed" 
                 Value="True"> 
              <Setter Property="{Binding SubstrateState, RelativeSource={RelativeSource AncestorLevel=local:Substrate}, Converter=converter:StringToSubstrateStatesConverter}" 
                  Value="Aborted" /> 
             </Trigger> 
            </Style.Triggers> 
           </Style> 
          </MenuItem.Style> 
         </MenuItem> 
        </ContextMenu> 
       </Grid.ContextMenu> 
      </Grid> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 
</Style> 

내가 얻을 : 는 " 'System.Windows.Baml2006.TypeConverterMarkupExtension'에 값을 제공에서 예외가 발생했습니다."

내부 예외 "로컬 : 기판이 Int32의 유효한 값이 아닙니다."

나는 내 값 변환기에 중단 점을 넣었으므로 문제가 다른 곳에서 발생한다고 생각하지 않습니다.

내가 뭘 잘못하고 있니?

+0

당신이 전체 컨트롤 템플릿을 제공 했습니까? 내 컨텍스트 메뉴를 볼 수 없기 때문에 내 관점에서 템플릿에 문제가 있습니다. – Alezis

답변

3

AncestorLevel = local : Substrate, AncestorLevel은 Int32를 필요로하기 때문에 오류가 발생합니다.

또한 수행하는 방식대로 달성 할 수 없습니다. 즉, DependancyProperty가 아닌 것처럼 Setter 속성에 바인딩을 수행 할 수 없습니다. 당신이 할 수있는 일은 제공하는 것입니다 MenuItemName 트리거의 세터에 컨트롤 속성을 업데이트 할 ControlTemplate.Trigger를 사용

<Style TargetType="{x:Type local:Substrate}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:Substrate}"> 
        <Grid> 
        <Grid.ContextMenu> 
         <ContextMenu Background="#212121"> 
           <MenuItem x:Name="myMenuItem" Header="Aborted"> 
           </MenuItem> 
          </ContextMenu> 
         </Grid.ContextMenu> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <Trigger SourceName="myMenuItem" Property="IsPressed" Value="true"> 
          <Setter Property="SubstrateState" Value="Aborted"></Setter> 
         </Trigger> 
        </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
+0

변경을했는데 오류가 사라졌습니다. 속성은 여전히 ​​설정되지 않습니다. 나는 valueconverter를 추가하려고 시도했지만 아무 것도하지 않았습니다. – user1029697

+0

나는 내 말대로 해봤지만 출력 창에 바인딩 오류가 있습니까? – Nitin

+0

아무 것도 아닌데, 모든 오버 헤드없이 작은 프로젝트를 작성하고 작동시킬 수 있는지 알아 봅니다. 감사! – user1029697

관련 문제