1

私はWPFに非常に慣れていないため、これが正しく機能しない理由についていくつかの指針が必要でした.

クリックすると復元ボタンに変わる最大化ボタンを作成しようとしています。コードビハインドで変更される2つの異なるスタイルのトグルボタンが機能すると思いました。最初に最大化ボタンを機能させようとしましたが、問題が発生しました。エラー '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;
        }
    }
4

1 に答える 1

1

マウスオーバーで画像を変更したくない。プロジェクト内の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>
于 2010-04-20T15:01:51.700 に答える