0

プロジェクトのすべてのボタンに適用するために、このコードを resorces.xaml に記述しました。

 <Style TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid>
                    <Rectangle x:Name="rect" Style="{DynamicResource rectangle_style}" Cursor="Hand">
                        <Rectangle.Fill>
                            <ImageBrush ImageSource="Attempts\image.jpg" Stretch="UniformToFill"/>
                        </Rectangle.Fill>
                    </Rectangle>
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content=""/>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsFocused" Value="True"/>
                    <Trigger Property="IsDefaulted" Value="True"/>
                    <Trigger Property="IsMouseOver" Value="True"/>
                    <Trigger Property="IsPressed" Value="True"/>
                    <Trigger Property="IsEnabled" Value="False"/>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

このスタイルを C# のコード ビハインドから編集します。これは、imagesource をコードから動的に変更できるようにするためです。C# のコード ビハインドからどのように記述できますか?

4

1 に答える 1

1

この行を 1 行ずつ翻訳する時間はありませんが、コード ビハインドで DataTemplates/Styles を作成する方法に関する完全な記事を書きました。

http://www.codeproject.com/Articles/29699/WPF-How-to-create-Styles-in-code-and-magical-Conte

これで始められるはずです

他の人が述べているように、ViewModel タイプのアプローチを採用し、バインディングに任せるべきだと思います。

ただし、別のアプローチは、Tag などのほとんど使用されていないプロパティを乗っ取り (または添付プロパティを追加することをお勧めします)、それをイメージ名に使用することです。次に、イメージへのパスとなるタグの特定のボタン (スタイルを適用するボタン) を検索するスタイルの一部となる ControlTemplate を作成できます。

だから、このようなもの:

<ControlTemplate x:Key="bordereredButtonTemplateWithMouseAndPropHiJacking" 
            TargetType="{x:Type Button}">
    <Border x:Name="border" CornerRadius="3" 
            Background="{TemplateBinding Background}" 
            BorderBrush="{TemplateBinding Foreground}" 
            BorderThickness="2" Width="auto" 
            Visibility="Visible">
        <StackPanel Orientation="Horizontal">
            <Image Source="{Binding RelativeSource={RelativeSource TemplatedParent},
                 Path=Tag}" Width="20" 
                 Height="20" HorizontalAlignment="Left"
                 Margin="{TemplateBinding Padding}" />
            <ContentPresenter  
                Margin="{TemplateBinding Padding}" 
                Content="{TemplateBinding Content}" 
                Width="auto" Height="auto"/>
        </StackPanel>
    </Border>
    <ControlTemplate.Triggers>
        <Trigger Property="IsEnabled" Value="false">
            <Setter TargetName="border" 
                Property="Opacity" Value="0.4"/>
        </Trigger>
        <Trigger Property="IsMouseOver" Value="true">
            <Setter TargetName="border" 
                Property="Background" Value="Orange"/>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

次に、これを XAML で使用する場合は、次のようにします。

<Button Template="{StaticResource bordereredButtonTemplateWithMouseAndPropHiJacking}"   
Tag="c:\temp\image1.jpg"/>
<Button Template="{StaticResource bordereredButtonTemplateWithMouseAndPropHiJacking}" 
Tag="c:\temp\image1.jpg"/>

あなたにとっては、テンプレートをスタイルの一部にしたいと思うでしょうが、私が望むアイデアを得ることができます

于 2013-03-20T16:08:22.400 に答える