1

私は WPF で小さなマインスイーパのクローンに取り組んでいます。公開されている(つまり、非表示ではない)タイルには次のスタイルがあります。

<Style x:Key="ExposedTile" BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" TargetType="Button">
    <Setter Property="Control.Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border Background="{TemplateBinding Background}">
                    <ContentPresenter />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

ユーザーが地雷を隠しているタイルをクリックしたときに、地雷の背景色をコードで設定します。

button.Background = Brushes.OrangeRed;

何らかの理由で、ボタン全体の背景ではなく、ボタン内のテキストの背景のみが設定されています。

ここに画像の説明を入力

私は何を間違っていますか?

edit : このコードは、鉱山のボタンがクリックされたときに実行されます。

button.Style = this.Resources["ExposedTile"] as Style;

if (button == explodedMineTile)
    button.Background = Brushes.OrangeRed;
else
    button.Background = Brushes.DarkOrange;
4

2 に答える 2

1

WidthHeightを厳密に設定する必要がありますButton。デフォルトWidthHeightは、コンテンツの長さに沿って撮影されます。例:

XAML

<Window.Resources>
    <Style x:Key="ExposedTile" BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" TargetType="Button">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border Background="{TemplateBinding Background}">
                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,5,0,0" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

<Grid>
    <Button Name="FlatButton"
            Width="25"
            Height="25"
            Content="*" /> 
</Grid>

Code behind

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_ContentRendered(object sender, EventArgs e)
    {
        FlatButton.Style = this.Resources["ExposedTile"] as Style;

        FlatButton.Background = Brushes.Orange;            
    }
}

Output

ここに画像の説明を入力

于 2013-09-08T16:48:31.923 に答える
0

コントロール テンプレートの境界線がタイルの全幅を持っていないと思います。したがって、テンプレート バインディングを使用して境界線の幅を設定できます。これが機能することを願っています...

<Style x:Key="ExposedTile" BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" TargetType="Button">
    <Setter Property="Control.Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border Background="{TemplateBinding Background}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}">
                    <ContentPresenter />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
于 2013-09-08T16:47:34.367 に答える