이미 물어 보려했지만 이미 충분한 정보를 제공하지 못했을 것입니다. 내 자신의 WPF 테마를 만들려고합니다. 이 스타일을 만들 때까지 모든 것이 괜찮 았습니다.TextBox 스타일의 SolidColorBrush가 변경되었습니다.
<Style TargetType="{x:Type TextBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="Disabled">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="PART_ContentHost">
<EasingDoubleKeyFrame KeyTime="0" Value="0.5"/>
</DoubleAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="Background">
<EasingColorKeyFrame KeyTime="0" Value="Red"/>
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Stroke).(SolidColorBrush.Color)" Storyboard.TargetName="Background">
<EasingColorKeyFrame KeyTime="0" Value="Yellow"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="ReadOnly"/>
<VisualState x:Name="MouseOver"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Rectangle x:Name="Background" Fill="{StaticResource OniiControlBackgroundBrush}" Stroke="{StaticResource OniiNormalBrush}" RadiusX="2" RadiusY="2"/>
<ScrollViewer x:Name="PART_ContentHost" Margin="2" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" FontFamily="{TemplateBinding FontFamily}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Foreground" Value="Black"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
</Style>
TextBox가 사용 중지 된 경우 TextBox 배경 및 BorderBrush의 색상을 변경해야합니다.
색상은
<Color x:Key="MainColor">#FF595959</Color>
<Color x:Key="OniiControlBackgroundColor">#FF333333</Color>
<SolidColorBrush x:Key="OniiNormalBrush" Color="{StaticResource MainColor}"/>
<SolidColorBrush x:Key="OniiControlBackgroundBrush" Color="{StaticResource OniiControlBackgroundColor}" />
이 정말 내 문제가 무엇인지 모르겠다 같은 ResourceDictionary에 정의되어있다. 내가 알고있는 무엇 :
/
-
OniiControlBackgroundBrush가 정적 리소스로 다른 스타일에서 참조
2/"그 색상을 전환해도 OniiControlBackgroundBrush 만 변경되지만 이번에는 노란색으로 변경됩니다"
,210<Rectangle x:Name="Background" Fill="{StaticResource OniiNormalBrush}" Stroke="{StaticResource OniiControlBackgroundBrush}" RadiusX="2" RadiusY="2"/>
- OniiNormalBrush는
3/
<Application.Resources>
<ResourceDictionary Source="Theme/OniiResourceDictionary.xaml">
</ResourceDictionary>
</Application.Resources>
이
(4)/"이 재현 시도"모든이 하나의 리소스 사전에 정의 된 "정적 리소스로 다른 스타일에서 참조 더 적은 사용자 정의 스타일로 더 작은 솔루션에서 문제가 발생했지만 성공하지 못했습니다. "
동일한 TextBox 스타일을 사용했습니다.
<TextBox Height="32" HorizontalAlignment="Left" Margin="38,51,0,0" Name="textBox1" VerticalAlignment="Top" Width="215" /> <CheckBox Content="Enabled" Height="16" HorizontalAlignment="Left" Margin="259,51,0,0" Name="checkBox1" VerticalAlignment="Top" Checked="checkBox1_Checked" Unchecked="checkBox1_Unchecked" /> <Border Height="148" HorizontalAlignment="Left" Margin="254,126,0,0" Name="border1" VerticalAlignment="Top" Width="98" /> <Rectangle Fill="{StaticResource OniiNormalBrush}" StrokeThickness="20" Stroke="{StaticResource OniiControlBackgroundBrush}" Height="148" HorizontalAlignment="Left" Margin="358,126,0,0" Name="rectangle5" VerticalAlignment="Top" Width="99" />
텍스트 상자가 사용 안 함 확인란에 의해 활성화되어, 테두리 StaticResources으로 두 색상으로 사용자 정의 스타일을 사용
가 5/"나는 내 원래의 솔루션 문제에 다음 코드를 추가 할 때이 없어"
<Rectangle Height="71" HorizontalAlignment="Left" Margin="130,131,0,0" Name="rectangle2" StrokeThickness="20" Stroke="{StaticResource OniiControlBackgroundBrush}" Fill="{StaticResource OniiNormalBrush}" VerticalAlignment="Top" Width="98" />
정말 실종 됐나요? 아니면 내가 정말 바보 야? 어쨌든 귀하의 도움을 주시면 감사하겠습니다. 나는 정말로 길을 잃었다. x : Shared = "false"는 주로 OniiNormalBrush를 변경해도 문제가 없기 때문에 사용하지 않으려합니다. 고맙습니다.
텍스트 상자의 색상을 변경하는 데 문제가 없습니다 ... 브러시의 색상 OniiControlBackgroundBrush가 어디에서나 변경됩니다. 나는 그것을 원하지 않는다. # 4에서는 브러시를 StaticResource로 참조 할 때 문제가없는 것 같습니다. –
맞아요,하지만 위 예제에서는 브러시의 색상을 정적으로 바인딩하고 있습니다. 색상 = "{StaticResource MainColor}". 나는 당신의 낮은 예에서 이것을하지 않는다고 생각합니다. 리소스는 객체에 대한 참조를 제공합니다. 색상의 경우 새 색상을 넣으면 참조가 변경되고 정적으로 참조 된 항목은 업데이트되지 않지만 dynamicResource 참조는 새 색상으로 표시됩니다. 또한 x : Shared의 기본값은 true이므로 수동으로 true로 설정하면 추가 효과가 없습니다. –
네, 그게 문제입니다. StaticResource로 도처에서 참조 된 두 브러쉬가 있습니다. 그래서 나는 그들이 변화하기를 기대하지 않는다. 최악의 문제는 그 브러시 중 하나가 예상되는 위치에서 업데이트되고 두 번째는 업데이트 된 곳에서 업데이트된다는 것입니다. x : Shared = "true"가 엉망이되어서 죄송합니다. 내가 멘션 한 것은 x : Shared = "false"그리고 이번에는 StaticResource를 사용한 # 4도 편집했습니다. 여전히 같은 결과. 하나의 색상은 어디서나 업데이트되고 두 번째 색상은 업데이트 된 위치에서만 업데이트됩니다. –