Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I want to utilise the following style on multiple ellipse in my application. Is there an easier way of making the style common but change the binding? I would prefer not replicate the same code over and over again.

<Style TargetType="Ellipse" x:Key="TeamColors">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=ColorNo}" Value="1">
            <Setter Property="Fill" Value="Red"></Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=ColorNo}" Value="2">
            <Setter Property="Fill" Value="Yellow"></Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=ColorNo}" Value="3">
            <Setter Property="Fill" Value="Lime"></Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=ColorNo}" Value="4">
            <Setter Property="Fill" Value="Black"></Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=ColorNo}" Value="0">
            <Setter Property="Fill" Value="Gray"></Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>

<Style TargetType="Ellipse" x:Key="TeamColors2">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=ColorNo2}" Value="1">
            <Setter Property="Fill" Value="Red"></Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=ColorNo2}" Value="2">
            <Setter Property="Fill" Value="Yellow"></Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=ColorNo2}" Value="3">
            <Setter Property="Fill" Value="Lime"></Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=ColorNo2}" Value="4">
            <Setter Property="Fill" Value="Black"></Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=ColorNo2}" Value="0">
            <Setter Property="Fill" Value="Gray"></Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
158 views
Welcome To Ask or Share your Answers For Others

1 Answer

Is there an easier way of making the style common but change the binding?

I am afraid not. You can't "inherit" a DataTrigger and change only the binding path in XAML. This is not supported.

What you could consider to do is to create the styles programmatically using a programming language like C#:

private static Style CreateStyle(string bindingPath)
{
    const string xaml = "<Style xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" TargetType="Ellipse">" +
        "<Style.Triggers>" +
            "<DataTrigger Binding="{{Binding Path={0}}}" Value="1">" +
             "   <Setter Property="Fill" Value="Red"></Setter>" +
            "</DataTrigger>" +
            "<DataTrigger Binding="{{Binding Path={0}}}" Value="2">" +
            "    <Setter Property="Fill" Value="Yellow"></Setter>" +
            "</DataTrigger>" +
            "<DataTrigger Binding="{{Binding Path={0}}}" Value="3">" +
            "    <Setter Property="Fill" Value="Lime"></Setter>" +
            "</DataTrigger>" +
            "<DataTrigger Binding="{{Binding Path={0}}}" Value="4">" +
            "    <Setter Property="Fill" Value="Black"></Setter>" +
            "</DataTrigger>" +
            "<DataTrigger Binding="{{Binding Path={0}}}" Value="0">" +
            "    <Setter Property="Fill" Value="Gray"></Setter>" +
            "</DataTrigger>" +
        "</Style.Triggers>" +
    "</Style>";

    return System.Windows.Markup.XamlReader.Parse(string.Format(xaml, bindingPath)) as Style;
}

Sample Usage:

Style style1 = CreateStyle("ColorNo");
Style style2 = CreateStyle("ColorNo2");
Application.Current.Resources.Add("TeamColors", style);
Application.Current.Resources.Add("TeamColors2", style2);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...