Стиль всплывающей подсказки в TextBoxStyle {WPF} - PullRequest
2 голосов
/ 11 декабря 2010

Я пытаюсь применить стиль всплывающей подсказки к textboxstyle В пользовательском управлении. Стиль у меня в:

<UserControl.Resources>

 <!--Style definition-->

</UserControl.Resources>

ToolTipStyle:

<Style x:Key="ToolTipStyle" TargetType="{x:Type ToolTip}">
    <Setter Property="Width" Value="200"/>
    <Setter Property="Height" Value="100"/>           
</Style>

TextBoxStyle:

    <Style x:Key="textBoxStyle" TargetType="{x:Type TextBox}">
        <Setter Property="Width" Value="200"/>
        <Setter Property="Height" Value="25"/>
        <Setter Property="FontSize" Value="13"/>
        <Setter Property="VerticalAlignment" Value="Center"/>

        <!--Apply toolip style-->
        <Setter Property="ToolTip.Style" Value="{StaticResource ToolTipStyle}"/>


        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true">
                <Setter Property="ToolTip"
                        Value="{Binding RelativeSource={RelativeSource Self}, 
                        Path =(Validation.Errors)[0].ErrorContent}"/>
            </Trigger>
        </Style.Triggers>
    </Style>

TextBoxStyle применяется к текстовому элементу управления:

    <TextBox Name="tbNick" 
             Text="{Binding Nick, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
             Style="{StaticResource textBoxStyle}"/>

Я получаю эту ошибку компиляции:

{"Объект Style не может влиять на свойство Style объекта объект, к которому он относится. "}

StackTrace:

в System.Windows.Markup.XamlReader.RewrapException (исключение e, IXamlLineInfo lineInfo, Uri baseUri) в System.Windows.Markup.WpfXamlLoader.Load (XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings настройки, Uri baseUri) в System.Windows.Markup.WpfXamlLoader.LoadBaml (XamlReader xamlReader, Boolean skipJournaledProperties, Объект rootObject, XamlAccessLevel accessLevel, Uri baseUri) в System.Windows.Markup.XamlReader.LoadBaml (Потоковый поток, ParserContext parserContext, Object parent, Boolean closeStream) в System.Windows.Application.LoadComponent (Объектный компонент, Uri resourceLocator) в Spirit.Views.ShellView.InitializeComponent () в c: \ Users \ Jan \ Documents \ Visual Studio 2010 \ Projects \ C # \ Pokec__Messenger \ Spirit_MEF \ Views \ ShellView.xaml: линия 1 в Spirit.Views.ShellView..ctor () в C: \ Users \ Jan \ Documents \ Visual Studio 2010 \ Projects \ C # \ Pokec__Messenger \ Spirit_MEF \ Views \ ShellView.xaml.cs: линии 9

Применение стиля всплывающей подсказки к стилю текстового поля не разрешено в WPF? Что я делаю не так?

Также в WPF я использую caliburn.micro и MEF, но я думаю, что это не вызвало эту ошибку.

Ответы [ 2 ]

10 голосов
/ 11 декабря 2010

Нет такого присоединенного свойства, как ToolTip.Style, и компилятор дает не совсем информативное описание ошибки. Если вы хотите иметь собственный стиль для TextBox, используйте неявный стиль:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   <Page.Resources>
      <Style x:Key="textBoxStyle" TargetType="{x:Type TextBox}">
         <Style.Resources>
            <Style x:Key="{x:Type ToolTip}" TargetType="{x:Type ToolTip}">
               <Setter Property="Width" Value="200"/>
               <Setter Property="Height" Value="100"/>
            </Style>
         </Style.Resources>
         <Setter Property="Width" Value="200"/>
         <Setter Property="Height" Value="25"/>
         <Setter Property="FontSize" Value="13"/>
         <Setter Property="VerticalAlignment" Value="Center"/>
         <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true">
               <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
            </Trigger>
         </Style.Triggers>
      </Style>
   </Page.Resources>
   <Grid>
      <TextBox Name="tbNick" Style="{StaticResource textBoxStyle}" Text="Test" ToolTip="Hey"/>
   </Grid>
</Page>
9 голосов
/ 11 декабря 2010

Объект Style не может влиять на свойство Style объекта, к которому он применяется. Возможно, вам придется проверить здесь http://windows -presentation-foundation.com / WPF_Triggers.aspx

проверьте этот код для настройки стиля подсказки

<Grid>

  <Grid.Resources>

    <Style x:Key="MyTooltip" TargetType="{x:Type ToolTip}">

      <Setter Property = "HorizontalOffset" Value="50"/>

      <Setter Property = "VerticalOffset" Value="50"/>

      <Setter Property = "Background" Value="Orange"/>

      <Setter Property = "Foreground" Value="Red"/>

      <Setter Property = "FontSize" Value="14"/>

      <Setter Property = "FontWeight" Value="Bold"/>

      <Setter Property = "FontFamily" Value="Courier New"/>

    </Style>

  </Grid.Resources>



  <TextBox Margin="10,10,10,10" Height="20">

    Pass over with your Mouse

    <TextBox.ToolTip>

      <ToolTip Style="{StaticResource MyTooltip}">

        <TextBlock>This is the Tooltip</TextBlock>

      </ToolTip>

    </TextBox.ToolTip>

  </TextBox>

</Grid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...