2010-04-20 2 views
1

저는 WPF가 새로 도입되었으며 이것이 왜 올바르게 작동하지 않는지에 대한 몇 가지 지침이 필요합니다.WPF의 다양한 하이라이트 이미지가있는 다중 ToggleButton 이미지

클릭하면 복원 버튼으로 변경되는 최대화 버튼을 만들려고합니다. 코드 뒤에서 변경 될 수있는 두 가지 스타일의 토글 버튼이 효과가 있다고 생각했습니다. 나는 먼저 최대화 버튼을 작동 시키려고 노력 중이며 문제가 발생했습니다. 'System.Windows.Controls.Image'는 Setter의 'System.Windows.Controls.Image.Source'속성에 유효한 값이 아닙니다. 내 xaml. 나는 완전히 무언가를 이해하지 못하는 것 같다. 어떤 도움이 가장 도움이 될 것입니다 :)

라이언

<Style x:Key="Maximize" TargetType="{x:Type ToggleButton}"> 
      <Style.Resources> 
       <Image x:Key="MaxButtonImg" Source="/Project;component/Images/maxbutton.png" /> 
       <Image x:Key="MaxButtonHighlight" Source="/Project;component/Images/maxbutton-highlight.png" /> 
      </Style.Resources> 
      <Setter Property="ContentTemplate"> 
       <Setter.Value> 
        <Image> 
         <Image.Style> 
          <Style TargetType="{x:Type Image}"> 
           <Setter Property="Source" Value="{DynamicResource MaxButtonImg}"/> 
           <Style.Triggers> 
            <Trigger Property="IsMouseOver" Value="True"> 
             <Setter Property="Source" Value="{DynamicResource MaxButtonHighlight}"/> 
            </Trigger> 
           </Style.Triggers> 
          </Style> 
         </Image.Style> 
        </Image> 
       </Setter.Value> 
      </Setter> 
     </Style> 


<ToggleButton Name="MaxButton" Width="31" Height="31" BorderThickness="0" Click="MaxButton_Click" Margin="0,0,10,0" Tag="Max" 
         Style="{DynamicResource Maximize}" /> 

뒤에 내 코드는 다음과 같은 간단한 뭔가를 할 것이다 : 당신은 이상 마우스의 이미지를 변경하지 않으

private void MaxButton_Click(object sender, RoutedEventArgs e) 
    { 
     ToggleButton tg = (ToggleButton)sender; 

     if (tg.IsChecked == true) { 
      tg.Style = (Style)FindResource("Restore"); 
      this.WindowState = WindowState.Maximized; 

     } else { 
      tg.Style = (Style)FindResource("Maximize"); 
      this.WindowState = WindowState.Normal; 
     } 
    } 

답변

0

합니다. 이미지를 프로젝트의 Images 폴더에 추가하고 이미지의 빌드 작업을 Resource로 설정했습니다.

<Window.Resources> 

     <Image x:Key="minImage" Source="/Images/min.png" Height="16" Width="16" /> 
     <Image x:Key="maxImage" Source="/Images/max.png" Height="16" Width="16" /> 

     <Style TargetType="{x:Type ToggleButton}" x:Key="minMaxButtonStyle"> 
      <Setter Property="Content" Value="{DynamicResource minImage}" /> 
      <Style.Triggers> 
       <Trigger Property="IsChecked" Value="True"> 
        <Setter Property="Content" Value="{DynamicResource maxImage}" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 

    </Window.Resources> 

    <StackPanel> 

     <ToggleButton Style="{StaticResource minMaxButtonStyle}" /> 

    </StackPanel> 

</Window> 
+0

작동하지만 이미지를 변경하지 않고 강조 표시를 만들기 위해 IsMouseOver를 사용하고 있습니다. 각 주에는 2 개의 이미지가 있으며 일반 이미지와 마우스가 이미지 위에 있습니다. 로 설정하고 Setter 속성 소스를 직접 이미지로 가져 와서 작업 할 수있었습니다. – Ryan