具有多个内容属性的工具提示控件

时间:2014-04-03 16:56:24

标签: c# silverlight xaml tooltip styling

我在SilverLight 5中设计自己的工具提示,并在显示时需要传递几个值。

这是风格:

   <Style x:Key="TooltipStyle" TargetType="ToolTip">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ToolTip">
                    <Border BorderBrush="Blue" BorderThickness="2" Background="White">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="Auto"/>
                            </Grid.RowDefinitions>

                            <StackPanel Orientation="Horizontal">

                                <TextBlock Text="Var Number: "></TextBlock>

                                <ContentPresenter x:Name="Content1"
                                              Content="{TemplateBinding Content}" 
                                              HorizontalAlignment="Center" 
                                              VerticalAlignment="Center"/>
                            </StackPanel>

                            <StackPanel Grid.Row="1">
                                <TextBlock Text="Last Update Date: " />

                                <ContentPresenter x:Name="Content2"
                                                  Content="{TemplateBinding Content}" 
                                                  HorizontalAlignment="Center" 
                                                  VerticalAlignment="Center"/>

                            </StackPanel>
                        </Grid>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

我正在应用这样的风格:

                    var customTooltip = new ToolTip
                    {
                        Style = (Style)Resources["TooltipStyle"],
                        Content = questions.Number[c]
                    };

                    ToolTipService.SetToolTip(textbox, customTooltip);

那里只有一个'Content'属性,但我也需要将一些内容传递给'Content2'。 (请注意,内容是在我们进行“for”循环时收集的。)

因此,出现的图像,而不是一个变量,可以同时具有Var Number和Last Update Date。声望太低,无法发布图片,这是工具提示的最终外观,可以给您一个想法: http://imgur.com/HYBbXMN

这就是情况。

现在我想知道我是否可以公开第二个Content属性?或者也许有更聪明,更好的方式来设计工具提示以满足我的需求?

请注意,此示例需要显示两个值(或“内容”),但工具提示会扩展为需要更多。

我会很感激任何想法。

1 个答案:

答案 0 :(得分:0)

所以为了让你更容易,我个人只是利用已经可用于此类事物的东西。例如,使用Tag将这类东西放回到模板中。

一个例子(对于你可能想要省略或改变的setter和东西的一些补充),例如;

<Style x:Key="NiftyToolTipStyle" TargetType="ToolTip">
        <Setter Property="FontFamily" Value="{StaticResource FontFamily}" />
        <Setter Property="FontSize" Value="{StaticResource FontSize}" />
        <Setter Property="Foreground" Value="Black" />
        <Setter Property="Background" Value="White" />
        <Setter Property="Padding" Value="3" />
        <Setter Property="BorderThickness" Value="1,2" />
        <Setter Property="BorderBrush" Value="Blue" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ToolTip">
                    <Border x:Name="Root"
                            Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}"
                            CornerRadius="1"
                            Padding="{TemplateBinding Padding}"
                            Cursor="{TemplateBinding Cursor}">
                            <Border.Effect>
                                <DropShadowEffect Opacity="0.35" ShadowDepth="3" />
                            </Border.Effect>
                            <TextBlock>
                                 <Run Text="{TemplateBinding Tag, StringFormat='Var Number: \{\0}'}"/>
                                 <LineBreak/>
                                 <Run Text="{TemplateBinding Content, StringFormat='Last Update Date: \{\0}'}"/>
                            </TextBlock>
                            <!--
                            <ContentPresenter Margin="{TemplateBinding Padding}"
                                              Content="{TemplateBinding Content}"
                                              ContentTemplate="{TemplateBinding ContentTemplate}"
                                              Cursor="{TemplateBinding Cursor}" />
                            -->
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>        
    </Style>

通过这种方式,您只需将一个值传递给Content,将另一个值传递给Tag,就可以了。您也可以轻松地做其他事情,有多种选择。希望这有帮助,干杯