أساليب تمرير الماوس على أزرار WPF مع المحتوى المختلط

StackOverflow https://stackoverflow.com/questions/1640739

سؤال

ولدي Button Style مستوى تطبيق تزوجنا طلبي يحدد أسلوب تمرير مؤشر الماوس عليها أن يتغير محتوى النص من الأبيض إلى الأسود. ولتحقيق ذلك لقد حاولت تعديل قالب زر، وإزالة ContentPresenter واستبدالها TextBlock. ومع ذلك، وهذا يعني أنني لا يمكن أن يكون المحتوى المختلط مثل:

<Button
    <Button.Content>
        <StackPanel Orientation="Horizontal">
            <Path Margin="3" Width="12.375" Height="9.70833" Canvas.Left="0" Canvas.Top="0"
                  Stretch="Fill" Fill="#FF115485"
                  Data="F1 M 18.8333,7.08333L 16.7083,4.91667L 10.5,10.5417L 8.52083,8.6875L 6.45833,10.4792L 10.4792,14.625L 18.8333,7.08333 Z "/>
            <TextBlock Margin="3">Hello</TextBlock>
        </StackPanel>
    </Button.Content>
</Button>

لتحسين الوضع، وبعد ذلك وضع ContentPresenter مرة أخرى، وعلى بلدي (نص فقط) تحديد أزرار لContentTemplate مثل هذا:

<Button IsDefault="True" Content="Text only Button"
        ContentTemplate="{StaticResource TextButtonTemplate}"
        Command="{Binding ...}" 
        CommandParameter="{...}" />

ومع Template محددة على النحو التالي. وهذا القالب تعمل فقط لButtons مع مضمون النص، مع نماذج أخرى محددة حسب الحاجة لمحتوى مختلط.

<DataTemplate x:Key="TextButtonTemplate">
    <TextBlock Text="{TemplateBinding Content}"
               Foreground="{Binding Path=Foreground,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Button}}" />
</DataTemplate>

لا أحد يعرف إذا كان هناك طريقة يمكنني تحسين هذا أبعد عن طريق الحفاظ على أسلوب مرر الفأرة فوق المطلوب، دون الحاجة إلى تحديد قوالب مخصصة؟

هل كانت مفيدة؟

المحلول

وإذا افترضنا أن المحتوى لا بوضوح تعيين أي الألوان من تلقاء نفسها، يمكنك إنجاز هذا مثل ذلك:

<Style x:Key="MyButtonStyle" TargetType="{x:Type Button}">
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="TextBlock.Foreground" Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>

ويعمل هذا لأن TextBlock.Foreground هو خاصية موروثة. طالما أن الضوابط داخل محتويات زر الخاص بك لا تضع صراحة المقدمة الخاصة بهم، وهذا سوف يعمل. إذا وضعوا ألوانها الخاصة، كل الرهانات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top