我有一個按鈕類,是為了通過模板來擴展樣式控制,主要取自這個問題。除了該帖子的主題外,我還想通過模板來控制禁用按鈕的顏色,而不是在按鈕的狀態改變時手動改變顏色。在Sebastian Ax的帖子中,有一個答案似乎指出了這一點,<Setter Property="TextElement.Foreground" TargetName="Content" Value="FFA0A0"/>如我下面的代碼例子所示,但只要包括這一行就會出現錯誤。只有完全洗掉這一行,它才能運行。當包含時,我得到三個錯誤中的一個(包含在我的主代碼之后)。除了可能與我是否在解決方案中構建所有專案或當前專案有關外,我得到的錯誤似乎很不一致,但即使如此,我也可以在多次嘗試啟動視窗時輕松得到一個又一個錯誤。
代碼:
<Button x:Class=" Resources.ButtonExt"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"。
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"。
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"。
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"。
mc:Ignorable="d"。
d:DesignHeight="450" d:DesignWidth="800"
x:Name="buttonExtension"/span>>
<Button.Style>/span>
<Style TargetType="{x:Type Button}"/span>>
< Setter Property="BorderThickness" Value="1"/>/span>
< Setter Property="BorderBrush" Value="#FFA0A0"/>
< Setter Property="Foreground" Value="{Binding Foreground}"/>
<Setter Property="Template">/span>
<Setter.Value>/span>
<ControlTemplate TargetType="{x:Type Button}"/span>>
<Border x: Name="Border" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}"/span> BorderBrush="{TemplateBinding BorderBrush}"/span>>
< ContentPresenter Name="content" HorizontalAlignment="Center"/span> VerticalAlignment="Center"/span>/>
</Border>
<ControlTemplate.Triggers>
< Trigger Property="IsMouseOver" Value="True">/span>
< Setter Property="Background"/span> Value="#FFE5F1FB" TargetName=Border"/>
< Setter Property="BorderBrush"/span> Value="#FF0078D6" TargetName=Border"/>
</Trigger>
< Trigger Property="IsFocused" Value="True">>
< Setter Property="BorderBrush"/span> Value="#FF0078D6" TargetName=Border"/>
< Setter Property="BorderThickness" Value="2" TargetName="Border"/>
</Trigger>
< Trigger Property="IsPressed" Value="True">
< Setter Property="Background"/span> Value="#FFCCE4F7" TargetName=Border"/>
< Setter Property="BorderBrush"/span> Value="#FF005499" TargetName="Border"/span>/>
< Setter Property="BorderThickness" Value="1" TargetName="Border"/>
</Trigger>
< Trigger Property="IsEnabled" Value="False">
< Setter Property="Background"/span> Value="#FFB3B3B3" TargetName=Border"/>
< Setter Property="BorderBrush"/span> Value="#FFA0A0" TargetName="Border"/>
<!-- 這是有問題的一行,包含它似乎會破壞我的GUI -->
<Setter Property="TextElement. Foreground" Value="FFA0A0" TargetName="Content"/> TargetName="Content"
</Trigger>/span>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>/span>
</Setter>/span>
</Style>>
</Button.Style>/span>
</Button>/span>
錯誤:
這里有趣的部分是,由于某些原因,當我去改變按鈕類檔案時,它開始導致另一個無關的組件注冊錯誤。我的用戶控制元件不包含任何按鈕,而按鈕只被添加到主視窗,包含在一個網格中的StackPanel中,這個網格也包含我的用戶控制元件。下面的第三個錯誤似乎表明上面提到的那行代碼有問題,但我無法判斷這個問題可能是什么。
- System.Windows.Markup.XamlParseException:"在型別'Resources.z_ListBoxUserControl'上呼叫與指定系結約束相匹配的建構式時,出現了例外。行號'53'和行位'4'。---> System.Exception: 組件'Resoruces.z_ListBoxUserControl'沒有一個由URI'/Resources;component/z_listboxusercontrol.xaml'識別的資源。
- System.Windows.Markup.XamlParseException: 'Set connectionId threw an exception. 行號'53'和行位'4'。---> System.InvalidCastException: [A]Namespace.z_ListBoxUserControl不能被投到[B]Resources.z_ListBoxUserControl。型別A源自'Resources,Version=1.0.7914.17476, Culture=neutral, PublicKeyToken=null',在'LoadNeither'的背景關系中是位元組陣列。B型源于'Namespace, Version=1.0.7914.17476, Culture=neutral, PublicKeyToken=null',在'LoadNeither'的背景關系中是一個位元組陣列。
- System.Windows.Markup.XamlParseException: 'Provide value on 'System.Windows.Baml2006.DeferredBinaryDeserializerExtension' threw an exception. 行號'44'和行位'66'。---> System.FormatException: 代號是無效的。
那么,我在這里做錯了什么?是否有其他方法可以讓我可靠地改變按鈕的前景顏色?我知道設定它有困難,這就是為什么我不能只用Property="Foreground"來設定它。我也嘗試過使用下面的片段,但很難搞清楚如何從Template.Triggers中分配前景顏色值。如果這是我應該走的路線,我也希望大家能幫助我解決這個問題。
<ControlTemplate.Resources>
<Style TargetType="TextBlock" x。 Key="ButtonLabel">。
< Setter Property="Text" Value="{Binding Path=Content, RelativeSource={RelativeSource AncestorType={x: Type Button}}"/>
< Setter Property="Foreground" Value="{Binding Path=Content, RelativeSource={RelativeSource AncestorType={x: Type Button}}"/>
</Style>>
</ControlTemplate.Resources>
編輯:
。我需要注意的是,我也曾嘗試在按鈕內放置一個文本塊,這也會引發同樣的錯誤。
此外,我沒有在 VS 環境中構建這個軟體,而是在另一個允許為該軟體構建宏的 IDE 中。我知道這可能會導致問題,但到目前為止,我已經能夠解決其他一切問題,并使其正常作業。
uj5u.com熱心網友回復:
我認為你的問題來自于Value="FFA0A0"。你應該寫Value="#FFA0A0"。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/312710.html
標籤:
