Стеклопанель в стиле - PullRequest
       40

Стеклопанель в стиле

1 голос
/ 14 сентября 2011

Использование следующего блока кода в windows.resource.

<Style TargetType="Button" x:Key="l1" >
    <Setter Property="Button.Effect" >
    <!--<Setter Property="BitmapEffect">-->
        <Setter.Value>
            <DropShadowEffect />
        </Setter.Value>
    </Setter>
    <Setter Property="Content" >
        <Setter.Value >
            <StackPanel  Orientation="Horizontal">
                <Image Source="Resources\find.bmp" Stretch="Uniform" ></Image>
                <TextBlock>Find</TextBlock>
            </StackPanel>
        </Setter.Value>
    </Setter>
</Style>

Работает только для одной кнопки, но как только я применяю ее к появлению ошибки второй кнопки во время выполнения.

<Button Height="23" HorizontalAlignment="Left" Margin="322,25,0,0" Name="Button18" VerticalAlignment="Top" Width="75" Style="{StaticResource l1}" />
<Button Height="23" HorizontalAlignment="Left" Margin="586,37,0,0" Name="Button19" VerticalAlignment="Top" Width="75" Style="{StaticResource l1}" />

какое-либо решение для решения этой проблемы?

Ответы [ 2 ]

0 голосов
/ 14 сентября 2011

Вы не можете установить содержимое элемента управления с помощью такого стиля (по крайней мере, не дважды).

Вы должны использовать шаблон для отправки содержимого, например:

    <DataTemplate x:Key="buttonTemplate">
        <StackPanel  Orientation="Horizontal">
            <Image Source="Resources\find.bmp" Stretch="Uniform" ></Image>
            <TextBlock>Find</TextBlock>
        </StackPanel>
    </DataTemplate>
    <Style TargetType="Button" x:Key="l1" >
        <Setter Property="Button.Effect" >
            <Setter.Value>
                <DropShadowEffect />
            </Setter.Value>
        </Setter>
        <Setter Property="ContentTemplate" Value="{StaticResource buttonTemplate}" />
    </Style>
0 голосов
/ 14 сентября 2011

Вы не можете установить Content для ContentControl напрямую таким образом. Причина этого в том, что StackPanel (чтобы назвать только одну) в вашем установщике Content является одним и тем же экземпляром для всех кнопок, к которым применяется стиль; однако это недопустимо (и, вероятно, в результате вы получите элемент , уже являющийся дочерним по отношению к другому элементу исключение).

Вместо этого вы должны установить свойство ContentTemplate:

<Setter Property="ContentTemplate">
    <Setter.Value>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Image Source="Resources\find.bmp" Stretch="Uniform" ></Image>
                <TextBlock>Find</TextBlock>
            </StackPanel>
        </DataTemplate>
    </Setter.Value>
</Setter>

Это будет работать, потому что теперь для каждого экземпляра шаблона будет создаваться новая ветвь визуального дерева (т. Е. Будет столько StackPanel с и т. Д., Сколько у вас кнопок).

...