设置DataTemplate控件样式代码

时间:2017-07-06 15:32:14

标签: wpf styles datatemplate

所以我有这个ListView与自定义Column Progress-Bar

            <ListView Name="lvFiles">        
                <ListView.Resources>
                    <DataTemplate x:Key="MyDataTemplate">
                        <Grid Margin="0,0,0,0">
                            <ProgressBar 
                                Name="progressBarColumn"
                                Maximum="100"
                                Value="{Binding Progress, UpdateSourceTrigger=PropertyChanged}" 
                                Width="{Binding Path=Width, ElementName=ProgressCell}" 
                                Margin="0,0,0,0"
                                Style="{StaticResource CustomProgressBar}" />
                            <TextBlock
                                Text="{Binding Path=Value, ElementName=progressBarColumn, StringFormat={}{0:N1}%}"
                                VerticalAlignment="Center"
                                HorizontalAlignment="Center"
                                FontSize="11.5"
                                Foreground="White"
                                Margin="0,-2,0,0"/>
                        </Grid>
                    </DataTemplate>                        
                    <ControlTemplate x:Key="ProgressBarTemplate">
                        <Label  HorizontalAlignment="Center" VerticalAlignment="Center" />
                    </ControlTemplate>
                    <Style TargetType="{x:Type TextBlock}">
                        <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=Text }"></Setter>
                    </Style>
                </ListView.Resources>                    
            </ListView>

风格

<Style x:Key="CustomProgressBar" TargetType="ProgressBar" >
    <Setter Property="Template" >
        <Setter.Value>
            <ControlTemplate TargetType="ProgressBar">
                <Border BorderBrush="#FF103766" BorderThickness="0" Background="#FF103766" CornerRadius="0" Padding="0">
                    <Grid x:Name="PART_Track">
                        <Rectangle x:Name="PART_Indicator" HorizontalAlignment="Left">
                            <Rectangle.Style>
                                <Style TargetType="Rectangle">
                                    <Setter Property="Fill" Value="Gray"/>
                                    <Style.Triggers>
                                        <DataTrigger Value="100" Binding="{Binding Path=Value, RelativeSource={RelativeSource AncestorType=ProgressBar}}">
                                            <Setter Property="Fill" Value="LightSeaGreen"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Rectangle.Style>
                        </Rectangle>
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

因此,如果我想创建多个Styles并从代码行为中更改此Style,是否可以?

2 个答案:

答案 0 :(得分:0)

一行代码可以做到这一点:

  progressBarColumn.Style = (Style)Application.Current.TryFindResource("CustomProgressBar");

如果您有多个自定义进度条样式,则只需替换&#34; CustomProgressBar&#34;在上面的代码中,无论你想要的进度条样式的名称是什么。

确保您的样式位于应用程序级别可见的字典(或位置)中。

答案 1 :(得分:0)

如果您使用DynamicResource标记扩展程序:

Style="{DynamicResource CustomProgressBar}" />

...您可以在运行时轻松切换资源

lvFiles.Resources["CustomProgressBar"] = Application.Current.Resources["yourOtherStyle"] as Style;

What's the difference between StaticResource and DynamicResource in WPF?