Click here to Skip to main content
15,885,079 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
I customized a toggle button(x1),border(x2),rectangle(x1) in a stack panel.It has about 1000 lines of code information. And I will copy paste for each approximately 50 times. (What I try to do is create an valve animation when I check the toggle button.) For each valve it will take a lot code lines. I want to add dcitionary and call from them for each button. How is it possible? I couldn't find a way. Thank you.

XML
<pre><StackPanel  x:Name="valve1Panel" 
                                  Margin="40,84,700,521">
                      <TextBlock Foreground="#FF353535" FontFamily="century gothic" 
                               FontSize="14" Margin="23,0,16,0">
                        <TextBlock.Style>
                            <Style TargetType="{x:Type TextBlock}">
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding IsChecked, 
                                                 ElementName=Valve1Toggle}" Value="True" >
                                        <Setter Property="Text" Value="Valve-1 Open"/>
                                    </DataTrigger>
                                    <DataTrigger Binding="{Binding IsChecked, 
                                                 ElementName=Valve1Toggle}" Value="false" >
                                        <Setter Property="Text" Value="Valve-1 Close"/>
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </TextBlock.Style>
                    </TextBlock>
                    <Grid HorizontalAlignment="Left" Width="150">
                        <Border BorderThickness="1 0 1 0" Width="16" BorderBrush="DimGray" 
                                CornerRadius=" 2 2 0 0" Margin="0,0,51,23" 
                                RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Right" 
                                Height="22" VerticalAlignment="Bottom" >
                            <Border.RenderTransform>
                                <TransformGroup>
                                    <ScaleTransform/>
                                    <SkewTransform/>
                                    <RotateTransform Angle="90"/>
                                    <TranslateTransform/>
                                </TransformGroup>
                            </Border.RenderTransform>
                            <Border.Style>
                                <Style TargetType="{x:Type Border}">
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding IsChecked, 
                                                    ElementName=Valve1Toggle}" Value="True">
                                            <Setter Property="BorderBrush" Value="#FF54D8D4"/>
                                            <Setter Property="Effect">
                                                <Setter.Value>
                                                    <DropShadowEffect ShadowDepth="0" 
                                                     BlurRadius="5" RenderingBias="Quality" 
                                                     Color="#FF54D8D4"/>
                                                </Setter.Value>
                                            </Setter>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Border.Style>
                        </Border>
                        <Border  BorderThickness="1 0 1 0" Width="16" BorderBrush="DimGray" 
                                 CornerRadius=" 0 0 2 2" Margin="0,0,97,23" 
                                 RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Right" 
                                 Height="22" VerticalAlignment="Bottom" >
                            <Border.RenderTransform>
                                <TransformGroup>
                                    <ScaleTransform/>
                                    <SkewTransform/>
                                    <RotateTransform Angle="90"/>
                                    <TranslateTransform/>
                                </TransformGroup>
                            </Border.RenderTransform>
                            <Border.Style>
                                <Style TargetType="{x:Type Border}">
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding IsChecked, ElementName=Valve1Toggle}" Value="True">
                                            <Setter Property="BorderBrush" Value="#FF54D8D4"/>
                                            <Setter Property="Effect">
                                                <Setter.Value>
                                                    <DropShadowEffect ShadowDepth="0" BlurRadius="5" RenderingBias="Quality" 
                                                                      Color="#FF54D8D4"/>
                                                </Setter.Value>
                                            </Setter>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Border.Style>
                        </Border>
                        <Border  BorderThickness="3 0 3 0" Width="22" BorderBrush="DimGray" CornerRadius=" 2" Margin="0,0,71,18" 
                                 RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Right" 
                                 Height="32" VerticalAlignment="Bottom" >
                            <Border.RenderTransform>
                                <TransformGroup>
                                    <ScaleTransform/>
                                    <SkewTransform/>
                                    <RotateTransform Angle="0" x:Name="turn"/>
                                    <TranslateTransform/>
                                </TransformGroup>
                            </Border.RenderTransform>
                            <Border.Style>
                                <Style TargetType="{x:Type Border}">
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding IsChecked, ElementName=Valve1Toggle}" Value="True">
                                            <Setter Property="Effect">
                                                <Setter.Value>
                                                    <DropShadowEffect ShadowDepth="0" 
                                                                 BlurRadius="5" RenderingBias="Quality" Color="DarkGray"/>
                                                </Setter.Value>
                                            </Setter>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Border.Style>
                        </Border>
                        <Rectangle x:Name="air" Width="21" Height="10" 
                                    Fill="#FF54D8D4" StrokeThickness="0" 
                                    Margin="34,25,0,29" 
                                    HorizontalAlignment="Left">
                            <Rectangle.Effect>
                                <DropShadowEffect ShadowDepth="0" BlurRadius="16" RenderingBias="Quality" Color="#FF54D8D4"/>
                            </Rectangle.Effect>
                        </Rectangle>
                        <ToggleButton x:Name="Valve1Toggle" Background="Transparent" 
                                      BorderThickness="0" Margin="0,0,15,0" 
                                      Style=" {StaticResource ManualAutoToggleInfo}">
                            <ToggleButton.Triggers>
                                <EventTrigger RoutedEvent="ToggleButton.Unchecked">
                                    <BeginStoryboard>
                                        <Storyboard x:Name="HideStackasdPanel">
                                            <DoubleAnimation 
                                                Storyboard.TargetName="air"
                                                Storyboard.TargetProperty="Width"
                                                BeginTime="0:0:0"
                                                From="68" To="21"
                                                Duration="0:0:0.3"/>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </EventTrigger>
                                <EventTrigger RoutedEvent="ToggleButton.Checked">
                                    <BeginStoryboard>
                                        <Storyboard x:Name="ShowStacasdkPanel">
                                            <DoubleAnimation
                                                Storyboard.TargetName="air"
                                                Storyboard.TargetProperty="Width"
                                                BeginTime="0:0:0"
                                                From="21" To="68"
                                                Duration="0:0:0.4"/>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </EventTrigger>
                                <EventTrigger RoutedEvent="ToggleButton.Unchecked">
                                    <BeginStoryboard>
                                        <Storyboard x:Name="HideStackasPanel">
                                            <DoubleAnimation 
                                                Storyboard.TargetName="turn"
                                                Storyboard.TargetProperty="Angle"
                                                BeginTime="0:0:0"
                                                From="90" To="0"
                                                Duration="0:0:0.3"/>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </EventTrigger>
                                <EventTrigger RoutedEvent="ToggleButton.Checked">
                                    <BeginStoryboard>
                                        <Storyboard x:Name="ShowStadanel">
                                            <DoubleAnimation
                                                Storyboard.TargetName="turn"
                                                Storyboard.TargetProperty="Angle"
                                                BeginTime="0:0:0"
                                                From="0" To="90"
                                                Duration="0:0:0.4"/>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </EventTrigger>
                            </ToggleButton.Triggers>
                        </ToggleButton>
                    </Grid>
                </StackPanel>


What I have tried:

Is there any way? thank you all.
Posted
Updated 17-Nov-21 10:51am
Comments
[no name] 17-Nov-21 13:42pm    
You've let the "lipstick" parts overwhelm the practical parts; of which there are none. No event handlers; no "code" (behind). Nothing that anyone can suggest other than "keep it simple" (starting out).

1 solution

You probably want to create a usercontrol that uses that stackpanel layout. Alternatively, you could put it into a resource library and deal with it that way.

Either way, you'd have a re-usable stackpanel.

Google is your friend for both strategies.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900