programing

스타일을 통해 이벤트 기능을 설정하려면 어떻게 해야 합니까?

lastmoon 2023. 4. 17. 22:18
반응형

스타일을 통해 이벤트 기능을 설정하려면 어떻게 해야 합니까?

마우스 인터랙션(MouseEnter, MouseLeave)에서 동일한 액션(코드 배후에 있는 함수 호출)을 생성하는 GUI 제어 요소가 몇 개 있습니다.
[편집] 이벤트 핸들러에서 스타일과 관계없는 기능을 실행하고 있습니다.
현재 각 컨트롤에서 이벤트 속성을 사용하고 있습니다.

<Button Name="Button" Content="Button 1" 
    MouseEnter="GeneralMouseEnter" MouseLeave="GeneralMouseLeave" 
    PreviewMouseDown="Button1_PreviewMouseDown" PreviewMouseUp="Button1_PreviewMouseUp" />
<Button Name="NotInteractingButton" Content="Button 2" 
    /><!-- this button has no MouseOver-effects -->
<ToggleButton Content="ToggleButton" 
    MouseEnter="GeneralMouseEnter" MouseLeave="GeneralMouseLeave"  />
<!-- needs to use IsMouseDirectlyOver on the slider knob... -->
<Slider Name="HorizontalSlider" 
    MouseEnter="GeneralMouseEnter" MouseLeave="GeneralMouseLeave" 
    ValueChanged="Slider_ValueChanged" />
<Slider Name="VerticalSlider" Orientation="Vertical" 
    MouseEnter="GeneralMouseEnter" MouseLeave="GeneralMouseLeave" 
    ValueChanged="Slider_ValueChanged" />

이 예의 많은 컨트롤이 같은 두 함수를 "General Mouse Enter"와 "General Mouse Leave"라고 부르고 있기 때문에 이 동작을 캡슐화하는 스타일 등을 정의할 수 있으면 좋겠습니다.

[편집 - 설명]
이것은 나중에 일종의 플러그인이 될 것입니다.
(코드 및 XAML 파일을 임의의 GUI 프로그램에 포함시키고 각 대화형 제어 요소에 스타일을 설정합니다.)

웹에서 찾은 바로는EventTriggers다음 예시와 같습니다.

<Style.Triggers>
  <EventTrigger RoutedEvent="Click">
    <EventTrigger.Actions>
      <BeginAction TargetName="SomeAction" />
    </EventTrigger.Actions>
  </EventTrigger>
</Style.Triggers>

액션 내에서 함수를 호출해야 하는지, 어떻게 호출해야 하는지 알 수 없습니다.

  • 각 컨트롤에 적용할 액션 + 트리거가 있는 스타일을 만들어 이 기능을 얻을 수 있습니까?어떻게 하는 거야?
  • 하나의 컨트롤에 여러 스타일(복수 상호 작용 이벤트의 경우)을 할당하려면 어떻게 해야 합니까?
  • 이런 행동을 할 수 있는 더 깨끗한 방법은 없을까?
  • [편집]
    예를 들어 내 GUI의 모든 슬라이더에서 마우스 조작을 하려면 어떻게 해야 합니까?

마틴,

EventSetter를 사용하여 스타일에서 직접 이벤트 핸들러를 할당할 수 있습니다.

<Style TargetType="{x:Type Button}">
  <EventSetter Event="Click" Handler="SomeAction"/>
</Style>

@ColinE:

이벤트 와이어업을 수행하기 위해 스타일을 사용하는 것이 좋은 생각인지 잘 모르겠습니다.스타일은 정의상 컨트롤의 시각적 모양을 정의합니다.

유감스럽게도 이것은 WPF 스타일에 대한 일반적인 오해인 것 같습니다.그 이름은 당신이 말한 것처럼 단지 외모를 정의하기 위한 것이었음을 암시하지만, 실제로는 훨씬 더 많은 것을 의미합니다.특성 집합을 컨트롤에 할당하기 위한 바로 가기로 스타일을 보다 일반적으로 보는 것이 유용합니다.

언급URL : https://stackoverflow.com/questions/4460201/how-to-set-an-event-function-via-a-style

반응형