【问题标题】:How to make loading bar without changing any kind of theme?如何在不改变任何主题的情况下制作加载栏?
【发布时间】:2013-03-18 05:17:51
【问题描述】:

我用的是ProgressBar,但是当我改变它的主题时,它看起来不一样了。

我从个性化选项更改了 Windows 主题(即,右键单击桌面) 到 windows 经典主题(即基本和高对比度主题)如下:

<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center"
            Background="Transparent">
    <ProgressBar IsIndeterminate="True" Height="20" Width="300"
                 VerticalAlignment="Center" BorderThickness="0"
                 BorderBrush="Transparent" HorizontalAlignment="Center"
                 Foreground="#0A8098" >
        <ProgressBar.Background>
            <ImageBrush ImageSource="/ClientApplication;component/Images/ProgressBackground.png"/>
        </ProgressBar.Background>
        <ProgressBar.Clip>
            <RectangleGeometry RadiusX="20.5" RadiusY="20.5" Rect="0,0,300,19"/>
        </ProgressBar.Clip>
    </ProgressBar>

    <TextBlock Text="LOADING PLEASE WAIT" Margin="0 10 0 0" VerticalAlignment="Center"
               HorizontalAlignment="Center" Foreground="#FFFFFF" />
</StackPanel>

和图片:

然后我再次将 windows 经典主题更改为 windows 7(即 aero 主题),

但我想要第一个但不影响/改变主题。

知道怎么做吗? 谢谢。

【问题讨论】:

    标签: wpf c#-4.0 progress-bar wpf-4.0


    【解决方案1】:

    ProgressBar 依赖于 Windows 主题。您可以创建自己的进度条并在需要时显示/隐藏它。

    唯一的缺点是,如果您希望将其与进度百分比相关联,则需要手动编写一些逻辑。

    使用 WPF,您可以绘制自己的进度条并根据需要对其进行动画处理。

    <Rectangle Name="LoadingRectangle" Stroke="Black" Fill="#C0000000" Visibility="{Binding Path=LoadingIcon}" />
    <Canvas Name="LoadingIcon" RenderTransformOrigin="0.5,0.5" Width="120" Height="120" Visibility="{Binding Path=LoadingIcon}" >     
    
    <Ellipse Width="19.5" Height="19.5" Canvas.Left="20.1696" Canvas.Top="9.76358" Stretch="Fill" Fill="DarkGoldenrod"/>        
    <Ellipse Width="18" Height="18" Canvas.Left="2.86816" Canvas.Top="29.9581" Stretch="Fill" Fill="DarkGoldenrod" OpacityMask="#E9000000" />        
    <Ellipse Width="17" Height="17" Canvas.Left="5.03758e-006" Canvas.Top="57.9341" Stretch="Fill" Fill="DarkGoldenrod" OpacityMask="#E1000000" />         
    <Ellipse Width="16" Height="16" Canvas.Left="12" Canvas.Top="85" Stretch="Fill" Fill="DarkGoldenrod" OpacityMask="#D2000000" />         
    <Ellipse Width="15" Height="15" Canvas.Left="37" Canvas.Top="102" Stretch="Fill" Fill="DarkGoldenrod" OpacityMask="#BC000000" />         
    <Ellipse Width="14" Height="14" Canvas.Left="66" Canvas.Top="101" Stretch="Fill" Fill="DarkGoldenrod" OpacityMask="#9C000000" />         
    <Ellipse Width="13" Height="13" Canvas.Left="91" Canvas.Top="86" Stretch="Fill" Fill="DarkGoldenrod" OpacityMask="#7B000000" />         
    <Ellipse Width="11" Height="11" Canvas.Left="106" Canvas.Top="65" Stretch="Fill" Fill="DarkGoldenrod" OpacityMask="#49000000" />         
    <Ellipse Width="10" Height="10" Canvas.Left="104" Canvas.Top="39" Stretch="Fill" Fill="DarkGoldenrod" OpacityMask="#27000000" />         
    <Ellipse Width="21.835" Height="21.862" Canvas.Left="47.2783" Canvas.Top="0.5" Stretch="Fill" Fill="DarkGoldenrod"></Ellipse>
    
    <Canvas.RenderTransform>         
    <RotateTransform x:Name="SpinnerRotate" Angle="0" />         
    </Canvas.RenderTransform>         
    <Canvas.Triggers>
    
    <EventTrigger RoutedEvent="ContentControl.Loaded">         
    <BeginStoryboard>         
    <Storyboard>   
    
    <DoubleAnimation Storyboard.TargetName="SpinnerRotate" Storyboard.TargetProperty="(RotateTransform.Angle)" From="0" To="360" Duration="0:0:01" RepeatBehavior="Forever" />  
    
    </Storyboard>         
    </BeginStoryboard>         
    </EventTrigger>         
    </Canvas.Triggers>         
    </Canvas>
    

    【讨论】:

    • 好的,谢谢。我需要矩形进度条而不是微调器。我需要windows xp之类的进度条。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 2022-06-15
    • 2015-02-14
    • 2015-04-06
    • 1970-01-01
    相关资源
    最近更新 更多