누구나 WPF-Progressbar의 전경색을 변경하는 방법을 알고 있습니까? 항상 녹색으로 합쳐지는 것 같습니다. 그것이 작동하지 않는 경우 당신이 스타일 또는 ProgressBar의의의 ControlTemplate을 수정해야 할 필요진행 표시 줄 전경색
답변
불행하게도, 그것은 하드 기본 스타일로 코딩 :
<Trigger Property="IsIndeterminate"
Value="false">
<Setter TargetName="Animation"
Property="Background"
Value="#80B5FFA9"/>
당신은 원래 XAML에서 자신 만의 스타일을 만들거나 예를 들어로드 이벤트에 배경을 재정의 할 시도 할 수 있습니다 :
private void ProgressBar_Loaded(object sender, RoutedEventArgs e)
{
var p = (ProgressBar)sender;
p.ApplyTemplate();
((Panel)p.Template.FindName("Animation", p)).Background = Brushes.Red;
}
하지만 신뢰할 수는 없습니다.
는이
<ProgressBar Height="25" IsIndeterminate="True" Width="150" Foreground="Red" ></ProgressBar>
으로 시도합니다.
Microsoft의 Expression Blend를 사용하거나 기존 템플릿을 복사하여 수정할 수 있습니다.
당신은 맞습니다. 최고의 옵션을 혼합하는 표현식으로 진행 막대 템플릿을 편집하십시오. 강압을위한 탁구. – Morvader
비슷한 문제가 발생했습니다. wh Windows 시각 설정은 최상의 성능 (제어판 -> 시스템 -> 고급 시스템 설정 -> 고급 -> 성능 -> 설정 -> 시각 효과 -> 최상의 성능을 위해 조정)에 맞게 최적화되었습니다. 진행률 표시 줄은 일반 설정에서는 좋았지 만 "최상의 성능"에서는 끔찍했습니다. Foreground를 "LightGreen"으로 변경했습니다. 여기
는저는 여기에 최적의 성능을 여기에
조정 때 본 변경
//before
<ProgressBar Name="Progress" Grid.Column="0" Value="{Binding ProgressValue}" HorizontalAlignment="Stretch"/>
//after
<ProgressBar Foreground="LightGreen" Name="Progress" Grid.Column="0" Value="{Binding ProgressValue}" HorizontalAlignment="Stretch"/>
입니다 무엇을 내가 정상적인 조건에서 기본 데 ForeColor에서 본거야
여기에 내가 최상의 성능을
조정시 이후에 본 무엇좀 더 자세히 : 원치 않는 녹색 색조 컨트롤 내에서 "애니메이션"라는 개체에서 오는 http://justmycode.blogspot.com.au/2012/08/the-case-of-strangely-coloured.html
마랏 Khasanov 지적 주형. 그래서 또 다른 쉬운 접근법은 그 객체를 숨기는 것입니다. 이렇게하면 애니메이션으로 간주되는 "글로우"효과가 비활성화됩니다.이 효과는 자산으로 간주되지만 거래 의사가 될 수 있습니다. 아래 그림과 같이 Loaded 이벤트에 대한 핸들러를 통해이를 구현했습니다.
이것은 an answer to another question에서 영감을 얻었습니다. 동일한주의 사항이 적용됩니다 : 컨트롤 템플릿을 변경하면 더 이상 작동하지 않을 수 있습니다.
public void ProgressBar_Loaded(object sender, RoutedEventArgs e)
{
var progressBar = sender as ProgressBar;
if (progressBar == null) return;
var animation = progressBar.Template.FindName("Animation", progressBar) as FrameworkElement;
if (animation != null)
animation.Visibility = Visibility.Collapsed;
}
전체 스타일을 덮어 쓰는 것이 유용하다는 것을 알았습니다. 다음과 같이 나온다
var yourcontrol = new ProgressBar();
// the control needs to load before it has a template.
yourcontrol.Loaded += (sender,e) => {
var str = new System.Text.StringBuilder();
using (var writer = new System.IO.StringWriter(str))
System.Windows.Markup.XamlWriter.Save(yourcontrol .Template, writer);
System.Diagnostics.Debug.Write(str);
};
// add it to your main grid, or some control thats loaded on screen.
gridMain.Children.Add(yourcontrol);
로 (일부 서식) 진행 스타일을 모든 컨트롤의 컨트롤 템플릿 스타일을 뽑을 수 :
<ControlTemplate x:Key="templateprogress"
TargetType="ProgressBar">
<Grid Name="TemplateRoot"
SnapsToDevicePixels="True">
<Grid.Resources>
<LinearGradientBrush StartPoint="0,0"
EndPoint="0,1"
x:Key="brushMagic1">
<GradientStop Color="#50FFFFFF"
Offset="0.5385" />
<GradientStop Color="#00FFFFFF"
Offset="0.5385" />
</LinearGradientBrush>
<LinearGradientBrush StartPoint="0,0"
EndPoint="0,1"
x:Key="brushMagic2">
<GradientStop Color="#80FFFFFF"
Offset="0.05" />
<GradientStop Color="#00FFFFFF"
Offset="0.25" />
</LinearGradientBrush>
<LinearGradientBrush StartPoint="0,0"
EndPoint="1,0"
x:Key="brushGlowRect">
<GradientStop Color="#00FFFFFF"
Offset="0" />
<GradientStop Color="#60FFFFFF"
Offset="0.4" />
<GradientStop Color="#60FFFFFF"
Offset="0.6" />
<GradientStop Color="#00FFFFFF"
Offset="1" />
</LinearGradientBrush>
<LinearGradientBrush StartPoint="0,0"
EndPoint="1,0"
x:Key="brushLeftDark">
<GradientStop Color="#0C000000"
Offset="0" />
<GradientStop Color="#20000000"
Offset="0.3" />
<GradientStop Color="#00000000"
Offset="1" />
</LinearGradientBrush>
<LinearGradientBrush StartPoint="0,0"
EndPoint="1,0"
x:Key="brushRightDark">
<GradientStop Color="#00000000"
Offset="0" />
<GradientStop Color="#20000000"
Offset="0.7" />
<GradientStop Color="#0C000000"
Offset="1" />
</LinearGradientBrush>
<RadialGradientBrush RadiusX="1"
RadiusY="1"
x:Key="brushRadialLeftLight"
RelativeTransform="1,0,0,1,0.5,0.5">
<GradientStop Color="#60FFFFC4"
Offset="0" />
<GradientStop Color="#00FFFFC4"
Offset="1" />
</RadialGradientBrush>
<LinearGradientBrush StartPoint="0,1"
EndPoint="0,0"
x:Key="brushCenterLight">
<GradientStop Color="#60FFFFC4"
Offset="0" />
<GradientStop Color="#00FFFFC4"
Offset="1" />
</LinearGradientBrush>
<RadialGradientBrush RadiusX="1"
RadiusY="1"
x:Key="brushRadial1"
RelativeTransform="1,0,0,1,-0.5,0.5">
<GradientStop Color="#60FFFFC4"
Offset="0" />
<GradientStop Color="#00FFFFC4"
Offset="1" />
</RadialGradientBrush>
<LinearGradientBrush StartPoint="0,0"
EndPoint="0,1"
x:Key="brushHighlight1">
<GradientStop Color="#90FFFFFF"
Offset="0.5385" />
<GradientStop Color="#00FFFFFF"
Offset="0.5385" />
</LinearGradientBrush>
<LinearGradientBrush StartPoint="0,0"
EndPoint="0,1"
x:Key="brushHighlight2">
<GradientStop Color="#80FFFFFF"
Offset="0.05" />
<GradientStop Color="#00FFFFFF"
Offset="0.25" />
</LinearGradientBrush>
</Grid.Resources>
<Rectangle RadiusX="2"
RadiusY="2"
Fill="{TemplateBinding Panel.Background}" />
<Border CornerRadius="2,2,2,2"
Margin="1,1,1,1"
Background="{StaticResource ResourceKey=brushMagic1}" />
<Border BorderThickness="1,0,1,1"
BorderBrush="#80FFFFFF"
Margin="1,1,1,1"
Background="{StaticResource ResourceKey=brushMagic2}" />
<Rectangle Name="PART_Track"
Margin="1,1,1,1" />
<Decorator Name="PART_Indicator"
Margin="1,1,1,1"
HorizontalAlignment="Left">
<Grid Name="Foreground">
<Rectangle Fill="{TemplateBinding TextElement.Foreground}"
Name="Indicator" />
<Grid Name="Animation"
ClipToBounds="True">
<Rectangle Name="PART_GlowRect"
Width="100"
Margin="-100,0,0,0"
HorizontalAlignment="Left"
Fill="{StaticResource ResourceKey=brushGlowRect}" />
</Grid>
<Grid Name="Overlay">
<Grid.ColumnDefinitions>
<ColumnDefinition MaxWidth="15" />
<ColumnDefinition Width="0.1*" />
<ColumnDefinition MaxWidth="15" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Rectangle RadiusX="1"
RadiusY="1"
Name="LeftDark"
Margin="1,1,0,1"
Grid.RowSpan="2"
Fill="{StaticResource ResourceKey=brushLeftDark}" />
<Rectangle RadiusX="1"
RadiusY="1"
Name="RightDark"
Margin="0,1,1,1"
Grid.Column="2"
Grid.RowSpan="2"
Fill="{StaticResource ResourceKey=brushRightDark}" />
<Rectangle Name="LeftLight"
Grid.Column="0"
Grid.Row="2"
Fill="{StaticResource ResourceKey=brushRadialLeftLight}" />
<Rectangle Name="CenterLight"
Grid.Column="1"
Grid.Row="2"
Fill="{StaticResource ResourceKey=brushCenterLight}" />
<Rectangle Name="RightLight"
Grid.Column="2"
Grid.Row="2"
Fill="{StaticResource ResourceKey=brushRadial1}" />
<Border Name="Highlight1"
Grid.ColumnSpan="3"
Grid.RowSpan="2"
Background="{StaticResource ResourceKey=brushHighlight1}" />
<Border Name="Highlight2"
Grid.ColumnSpan="3"
Grid.RowSpan="2"
Background="{StaticResource ResourceKey=brushHighlight2}" />
</Grid>
</Grid>
</Decorator>
<Border BorderThickness="{TemplateBinding Border.BorderThickness}"
CornerRadius="2,2,2,2"
BorderBrush="{TemplateBinding Border.BorderBrush}" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="ProgressBar.Orientation"
Value="Vertical">
<Setter Property="FrameworkElement.LayoutTransform"
TargetName="TemplateRoot">
<Setter.Value>
<RotateTransform Angle="-90" />
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="ProgressBar.IsIndeterminate"
Value="True">
<Setter Property="UIElement.Visibility"
TargetName="LeftDark"
Value="Collapsed" />
<Setter Property="UIElement.Visibility"
TargetName="RightDark"
Value="Collapsed" />
<Setter Property="UIElement.Visibility"
TargetName="LeftLight"
Value="Collapsed" />
<Setter Property="UIElement.Visibility"
TargetName="CenterLight"
Value="Collapsed" />
<Setter Property="UIElement.Visibility"
TargetName="RightLight"
Value="Collapsed" />
<Setter Property="UIElement.Visibility"
TargetName="Indicator"
Value="Collapsed" />
</Trigger>
<Trigger Property="ProgressBar.IsIndeterminate"
Value="False">
<Setter Property="Panel.Background"
TargetName="Animation"
Value="#80B5FFA9" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<Style TargetType="ProgressBar">
<Setter Property="Template"
Value="{StaticResource ResourceKey=templateprogress}" />
</Style>
를 사용하여 스타일과 당신의 요구 사항에 따라 사용자 정의
</Border>
</DockPanel>
</Border>
<Border Background="White" Margin="40,0,0,0" Width="1.5" HorizontalAlignment="Left"></Border>
<Border Background="White" Margin="80,0,0,0" Width="1.5" HorizontalAlignment="Left"></Border>
<Border Background="White" Margin="120,0,0,0" Width="1.5" HorizontalAlignment="Left"></Border>
<Border Background="White" Margin="160,0,0,0" Width="1.5" HorizontalAlignment="Left"></Border>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
저 저항 경로를 선택하고 인기있는 MahApps 라이브러리를 사용하지 않는 이유는 무엇입니까?
- MahApps 라이브러리 가져 오기 : 네임 스페이스 https://www.nuget.org/packages/MahApps.Metro
설정 :
xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls"
추가를 좋아하는 색으로 '전경'설정 'MetroProgressBar'
<controls:MetroProgressBar Height="40" Background="{StaticResource GrayBrush2}" BorderBrush="{StaticResource GrayBrush8}" BorderThickness="3" Foreground="{StaticResource GrayBrush8}" IsIndeterminate="False" Value="{Binding CurrentProgressInfo.ProgressPercent}" />
- 1. WinForms의 진행 표시 줄
- 2. 진행 표시 줄 문제
- 3. Android의 진행 표시 줄
- 4. 진행 표시 줄 도움말
- 5. 다중 진행 표시 줄
- 6. 유연한 진행 표시 줄
- 7. 연속 진행 표시 줄
- 8. Java로드/진행 표시 줄
- 9. 애플릿이로드되는 동안 진행 표시 줄
- 10. HTML5의 진행 표시 줄 버튼
- 11. 버튼의 진행 표시 줄 클릭
- 12. 목록 상자의 진행 표시 줄?
- 13. 파일 업로드 - 진행 표시 줄?
- 14. 장고 - 셀러리 진행 표시 줄
- 15. 웹 페이지의 진행 표시 줄
- 16. Android의 맞춤 진행 표시 줄?
- 17. 테두리가없는 Android의 진행 표시 줄
- 18. 제목 표시 줄의 진행 표시 줄
- 19. 자바 스크립트를 사용하는 진행 표시 줄
- 20. gtk로 복수 진행 상황 표시 줄 업데이트 ++
- 21. 서버와 동기화하는 동안 진행 표시 줄
- 22. 윈도우 7 작업 표시 줄 진행
- 23. Office VBA를 사용하는 진행 표시 줄
- 24. Ruby on Rails 진행 표시 줄
- 25. Android : 카운트 다운을 보여주는 진행 표시 줄?
- 26. RPC 중 진행 표시 줄 추가
- 27. JSF 진행 표시 줄 - 서버 측 프로세스
- 28. 초기 앱로드시 AsyncTask 객체가있는 진행 표시 줄
- 29. android web view의 동적 진행 표시 줄
- 30. C++에서 간단한 진행 표시 줄
발췌 문장이 작동합니다. 왜 안정적이지 않습니까? 귀하의 답변에 감사드립니다. – Morvader
예, Expression Blend를 사용하여 진행률 표시 줄 템플릿을 편집하는 것이 가장 좋은 방법이지만 코드 숨김 코드는 테스트 및 빠른 개발에 매우 유용합니다. (IMHO) – Morvader
이 솔루션은 Aero 테마와 함께 작동합니다. Animation이라는 요소가 있는지 확인하기 위해 다른 테마를 확인해야합니다. 물론이 문제는 맞춤 템플릿과 함께 나타날 수 있습니다. 또 다른 문제는 테마 전환입니다. 사용자가 OS 테마를 변경할 때 WPF가 컨트롤을 다시로드하는지 여부는 알 수 없습니다. 그렇지 않다면이 순간을 처리하고 애니메이션 배경을 다시 변경해야합니다. 자신 만의 템플릿을 제공하고 싶지 않다면 ProgressBar에서 파생시키는 것이 좋을 것 같습니다. 템플리트가 변경 될 때마다 템플리트 버그를 해결하려면 OnApplyTemplate을 대체해야합니다. –