WPF Повторное использование шаблона в других ControlTemplates - PullRequest
3 голосов
/ 28 марта 2009

В настоящее время я пытаюсь выяснить, как повторно использовать шаблон в других шаблонах элементов управления (как следует из названия). Я пытаюсь сделать несколько кнопок, которые немного отличаются друг от друга, но имеют несколько похожих функций. Все они имеют несколько одинаковых графических элементов и имеют одинаковые триггеры, которые имеют дело с этими графическими элементами. То, что я надеюсь сделать, это иметь возможность взять этот код и поместить его в другой шаблон и просто иметь ссылки на все кнопки этого шаблона. Таким образом, это легче для менеджера и просто имеет больше смысла в целом. Я уверен, что есть способ, но я все еще новичок в WPF. Спасибо за любую помощь!

EDIT: Вот код, показывающий, что я хочу сделать.

<ControlTemplate x:Key="LeftJustifyButtonTemplate" TargetType="{x:Type RadioButton}">
    <Grid Width="24" Height="24">
        <Rectangle HorizontalAlignment="Stretch" Fill="#00000000" Stroke="{x:Null}"/>
        <Rectangle x:Name="backRectangle" HorizontalAlignment="Stretch" Margin="0,0,0,0" Stroke="#FFB9B9B9" StrokeThickness="0.5" RadiusX="4" RadiusY="4" Visibility="Hidden">
            <Rectangle.Fill>
                <LinearGradientBrush EndPoint="0.146,0.146" StartPoint="2.057,2.057">
                    <GradientStop Color="#FF000000" Offset="0"/>
                    <GradientStop Color="#FFFFFFFF" Offset="1"/>
                </LinearGradientBrush>
            </Rectangle.Fill>
        </Rectangle>
        <Rectangle x:Name="foreRectangle" Margin="1,1,1,1" VerticalAlignment="Stretch" Fill="#FFE0E0E0" Stroke="{x:Null}" StrokeThickness="0.5" RadiusX="4" RadiusY="4" Visibility="Hidden"/>
        <Path Margin="2.875,7,2.875,0" Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000" Data="M2.875,7.5 L21.145964,7.5" VerticalAlignment="Top" Height="1" StrokeThickness="0.5"/>
        <Path Margin="2.875,9.375,8,0" VerticalAlignment="Top" Height="1" Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000" Data="M3.625,4 L17.514069,4" StrokeThickness="0.5"/>
        <Path Margin="2.875,11.5,2.875,11.5" Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000" Data="M2.875,7.5 L21.145964,7.5" StrokeThickness="0.5"/>
        <Path Margin="2.875,0,8,9.375" VerticalAlignment="Bottom" Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000" Data="M3.625,4 L17.514069,4" Height="1" StrokeThickness="0.5"/>
        <Path Margin="2.875,0,2.875,7" Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000" Data="M2.875,7.5 L21.145964,7.5" VerticalAlignment="Bottom" Height="1" StrokeThickness="0.5"/>
    </Grid>
    <ControlTemplate.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter TargetName="backRectangle" Property="Visibility" Value="Visible"/>
            <Setter TargetName="foreRectangle" Property="Visibility" Value="Visible"/>
        </Trigger>
        <Trigger Property="IsChecked" Value="True">
            <Setter TargetName="backRectangle" Property="Visibility" Value="Visible"/>
            <Setter TargetName="foreRectangle" Property="Visibility" Value="Visible"/>
            <Setter TargetName="foreRectangle" Property="Fill" Value="#FFFFFFFF"/>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

Практически все это, за исключением 5 путей в середине, используется в нескольких кнопках. Это потому, что он используется для наведения мыши и проверки триггеров. Я хочу, чтобы весь этот код находился в одном месте, а затем имел несколько кнопок для ссылки на этот код.

Ответы [ 2 ]

0 голосов
/ 04 июня 2009

Не думаю, что вы можете сделать это с помощью шаблонов, но проверьте свойство BasedOn стиля.

0 голосов
/ 28 марта 2009

О какой разнице вы конкретно говорите? Возможно, вам удастся осуществить это с помощью комбинации прикрепленных свойств и триггеров, но нам нужно больше узнать о вашей проблеме.

...