2017-11-16 14 views
-1

저는 WPF 및 MVVM을 처음 사용하고 있으며 모든 표준 Window 기능을 사용하여를 사용자 정의하려고합니다. 나는 최대화/창을 최소화 Button 내용과 사투를 벌인거야 :C# WPF - 다른 컨트롤 이벤트가 발생할 때 컨트롤 내용을 변경하십시오.

enter image description here

내가 두 번 때를 클릭 : 나는 사용자를 두 번 클릭이 WindowChrome 표시 줄 오른쪽 아이콘을 표시하기 위해 때 내용이 변경하려면

enter image description here

내가 버튼 Triggers과 내용을 변경하는 데 성공하지만, 다른 컨트롤의 이벤트가 발생할 때 어떻게 그것을 변경할 수 있습니다 : 바, 그 결과는되어야 하는가?

미리 도움을 청하십시오!

+0

다른 제어 이벤트를 말할 때 확실하지 않습니다. 하지만 일반적인 이벤트 처리를위한 WPF에서는 일반적으로 명령 (저장, 잘라 내기, 복사, 붙여 넣기 등)을 사용하여 구현됩니다. (https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/commanding-overview) – Viju

+0

윈도우의'WindowState' 속성에 트리거를하고 싶습니다. 상태가 아니라 이벤트입니다. 질문은 물론, 당신이 이것을 구현하는 방법입니다. 나는 그것에 관한 어떤 힌트도 보지 못했다. –

+0

@Viju이 경우 Window 상단 바가 DoubleClicked이면 최대화 단추 내용이 변경되어야합니다. – Belfed

답변

1

Window.WindowState 값을 기준으로 콘텐츠를 설정하는 트리거가있는 스타일을 버튼에 지정하십시오. 이것은 사건이 아닙니다. 버튼은 윈도우의 현재 상태를 반영합니다.

<Style TargetType="Button"> 
    <Style.Triggers> 
     <DataTrigger 
      Binding="{Binding WindowState, RelativeSource={RelativeSource AncestorType=Window}}" 
      Value="Maximized"> 
      <Setter Property="Content"> 
       <Setter.Value> 
        <!-- I don't know if you're using a Path or what --> 
        <Path Stroke="White" Data="..." /> 
       </Setter.Value> 
      </Setter> 
     </DataTrigger> 
     <DataTrigger 
      Binding="{Binding WindowState, RelativeSource={RelativeSource AncestorType=Window}}" 
      Value="Normal"> 
      <Setter Property="Content"> 
       <Setter.Value> 
        <!-- I don't know if you're using a Path or what --> 
        <Path Stroke="White" Data="..." /> 
       </Setter.Value> 
      </Setter> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

그 경로의 각각의 사본이 있기 때문에, 대신 버튼의 템플릿을 설정하는 현명한 것, 당신은 두 번 스타일을 재사용 할 경우, 그들이 공유 할 수 없습니다.

이것이 코드에서 작동하지 않는 몇 가지 이유가있는 경우 코드를 보여주십시오.

+1

그게 내가 찾고 있었어, 다른 유형의 속성을 참조하는 속성을 설정하는 방법. WPF에서 더 많은 작업을해야한다고 생각합니다. 창 상태를 변경할 수있는 모든 단일 이벤트를 구현하여 버튼 내용을 설정하려고했습니다. 도움 주셔서 대단히 감사합니다! – Belfed

+0

@ Belfed 기꺼이 도와 드리겠습니다. WPF에서는 컨트롤의 시각적 상태를 관리하는 데 이벤트를 많이 사용하지 않습니다. 관심있는 * 상태 *를 나타내는 속성을 항상 찾습니다. - 버튼에는 'IsPressed'등이 있으며 트리거를 작성합니다. 'VisualStateManager.VisualStateGroups'는 당신이 보게 될 또 다른 일이지만이 시점에서 그곳으로 갈 필요가 없습니다. –