簡體   English   中英

為什么我的文本框對ControlTemplate的樣式中的IsMouseOver沒有反應

[英]Why doesn't my Textbox react on IsMouseOver in the Style for the ControlTemplate

因此,我嘗試對TextBox進行一些樣式設置,其想法是,我想在將鼠標懸停在TextBox上時對BorderBrush進行樣式設置,但由於某種原因它沒有更改邊框,因此我也嘗試更改了Background, 。 那時我意識到它對IsMouseOver沒有反應,但確實設置了背景以及我所做的所有其他事情,只是事件IsMouseOver沒有反應。

控制

<TextBox Width="700"
         Height="340"
         HorizontalAlignment="Right"
         Margin="0,0,230,140"
         Foreground="#8bf502"
         TextWrapping="Wrap"
         Style="{DynamicResource TextboxStyle}"/>

樣式

<Style TargetType="{x:Type TextBox}" x:Key="TextboxStyle">
    <Setter Property="OverridesDefaultStyle" Value="True"></Setter>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="TextBox">
                <Border Background="#424242">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"></ContentPresenter>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="BorderBrush" Value="Orange"></Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

要更改邊框的背景,請給邊框命名,然后將SetName =“ MyBorder”添加到設置器中

您缺少TargetNameBorderThickness

<Style TargetType="{x:Type TextBox}" x:Key="TextboxStyle">
    <Setter Property="OverridesDefaultStyle" Value="True"></Setter>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="TextBox">
                <Border Name="border" BorderThickness="2" Background="#424242">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"></ContentPresenter>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter TargetName="border" Property="BorderBrush" Value="Orange"></Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

沒有Border除非您將其BorderThickness屬性設置為0以外的0

您使用的是自定義Template ,但是您的模板未應用模板化TextBox的border屬性。 嘗試將以下內容添加到模板的Border元素中:

BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"

實際上,您可以通過幾種方法進行處理:使用模板綁定並將觸發器放入Style 使用模板綁定並將觸發器放入模板中; 使用明確的目標元素,並將觸發器放入模板(如此處其他建議); 等。“正確”方法取決於更改屬性時控件如何/是否希望響應。 例如:如果有人直接在TextBox上設置了新的BorderBrush ,您是否希望它取代您的橙色懸停效果? 值得閱讀依賴屬性的值優先級 ,以了解如何以及在何處設置某些屬性的含義。

值得注意的是,如果您希望文本是可編輯的(或可選的),則您的模板是不完整的,將無法使用。 TextBox希望其模板具有一個專門命名的ScrollViewer ,可以在其中插入可編輯的文本視圖。 嘗試將您的ContentPresenter替換為以下內容:

<ScrollViewer x:Name="PART_ContentHost"
              Padding="{TemplateBinding Padding}" />

請注意, x:Name屬性必須完全匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM