Tôi muốn đặt Button
's Content
đến Path
được xác định trong Resources
. Vì vậy, tôi đã tạo UserControl
, được xác định Path
, hai Brushes
và nút Style
trong tài nguyên ... và mọi thứ đều ổn.Đường dẫn từ tài nguyên dưới dạng nội dung của nút
<UserControl ...>
<UserControl.Resources>
<Path x:Key="PageSmallIcon2" Stretch="Fill" Fill="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}, Path=Foreground}" Stroke="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Control}}, Path=Foreground}" SnapsToDevicePixels="True" Data="F1 M 19,25L 27,25L 27,33L 19,33L 19,25 Z M 19,36L 27,36L 27,44L 19,44L 19,36 Z M 31,25L 57,25L 57,33L 31,33L 31,25 Z M 19,47L 27,47L 27,55L 19,55L 19,47 Z "/>
<SolidColorBrush x:Key="MainColorBrush2" Color="Orange"/>
<SolidColorBrush x:Key="WhiteColorBrush2" Color="WhiteSmoke"/>
<Style x:Key="TransparentButtonStyle2" TargetType="{x:Type Button}">
<Setter Property="Foreground" Value="{StaticResource WhiteColorBrush2}"/>
<Setter Property="Height" Value="25"/>
<Setter Property="Width" Value="25"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Rectangle Fill="Transparent"/>
<ContentPresenter x:Name="contentPresenter" Content="{TemplateBinding Content}" Margin="2" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Foreground" Value="{StaticResource MainColorBrush2}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid>
<Button Command="{Binding Path=SmallPageSizeCommand}" Style="{StaticResource TransparentButtonStyle2}" Content="{StaticResource PageSmallIcon2}"/>
...
</Grid>
</UserControl>
Tôi quyết định đặt các tài nguyên đó vào riêng biệt ResourceDictionaries
. Tôi dự định có thêm Paths
và Brushes
... Ngoài ra, tôi muốn chỉ có một kiểu cho nút. Về cơ bản tôi đang làm điều này, bởi vì tôi đã có phong cách cho mỗi nút của tôi và Path
cho mỗi Button
cụ thể là một phần của ControlTemplate
của Button
.
Vì vậy, tôi đã tạo ra ba ResourceDictionaries
Colors.xaml
, Icons.xaml
và Controls.xaml
và sau đó tôi được cập nhật App.xaml
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Theme/Colors.xaml"/>
<ResourceDictionary Source="Theme/Icons.xaml"/>
<ResourceDictionary Source="Theme/Controls.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Bây giờ Path
's Fill
bất động sản không được cập nhật khi tôi nhấn mà Button
. Ai có thể vui lòng giải thích lý do tại sao nó không hoạt động trong riêng biệt ResourceDictionaries
và cung cấp cho tôi giải pháp cho vấn đề này?
CẬP NHẬT
Vì vậy, tôi phát hiện ra vấn đề đó là trong Path
. Khi tôi có điều đó Path
trong <UserControl.Resources>
, màu sắc trong Colors.xaml
và kiểu nút trong Controls.xaml
mọi thứ hoạt động trở lại.
Tôi cũng phát hiện ra rằng khi tôi có tôi Path
trong Icons.xaml
và tôi sử dụng nó trong UserControl
của tôi như là nội dung của nút
<Button Command="{Binding Path=SmallPageSizeCommand}" Style="{StaticResource TransparentButtonStyle2}" Content="{StaticResource PageSmallIcon2}"/>
và tôi có nhiều trường hợp của UserControl
tôi ... sau đó Path
chỉ hiện diện trong một ví dụ của một UserControl
tại một thời điểm.
Mọi thứ đều ổn với tôi. Bạn có nhận được bất kỳ lỗi nào trong Cửa sổ đầu ra có trình gỡ lỗi được đính kèm không? Miễn là bạn bao gồm Colors.xaml của bạn trước khi Controls.xaml, bạn sẽ nhận được kết quả mong muốn. –
@NovitchiS No. Không có Lỗi trong Cửa sổ Đầu ra. –
Vấn đề thứ hai từ bản cập nhật là vì bạn đang cho cùng một phần tử cha mẹ khác nhau trong XAML. Đối với nhiều 'Nút' bạn đang thiết lập cùng một' Đường dẫn', được định nghĩa là tài nguyên, như 'Nội dung 'của' Nút'. Để giải quyết điều này, bạn có thể đánh dấu tài nguyên bằng thuộc tính 'x: Shared =" False ". Trong trường hợp này Trình phân tích XAML sẽ tạo ra một cá thể mới của phần tử Đường dẫn cho mỗi Tham chiếu. –