0

尝试在progressBar 中设置文本,并且我与Setters 相处得很好。但我必须将此值与:

{TemplateBinding Value}+"% Completed 

我如何与其他文本连接。

在进度条内打印文本的代码:

 <Border x:Name="whiteBorder" >
       <ContentPresenter   x:Name="perHolder" Content="{TemplateBinding Value}" VerticalAlignment="Center" HorizontalAlignment="Right"/>
 </Border>

Silverlight 3.0 版

4

3 回答 3

2

另一种选择是使用内联元素,例如运行:

<TextBlock>
   <Run Text="{TemplateBinding Value}"/>
   <Run Text="% Completed "/>
</TextBlock>

编辑:

在查看您的示例后,我认为您不应该在模板中使用内容演示器。内容呈现器用于可以托管内容的控件(阅读:具有内容属性)。内容呈现器,当给定一个字符串作为内容时,肯定会显示该字符串,您可以使用它,但对于字符串,您最好的选择是 textblock。它还使 oyu 可以更好地控制字符串的显示方式。

还有,我的坏。TemplateBinding 对可用的地方很挑剔,内联元素不在他的列表中。你最好的选择就像 Cris W. 说的,使用 stackpanel:

<Border x:Name="whiteBorder" >
     <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Right">
        <TextBlock Text="{TemplateBinding Value}"/>
        <TextBlock Text="% Completed"/>
     </StackPanel>/>
</Border>
于 2013-08-21T16:04:04.890 回答
1

或者......你也可以只使用StringFormat

<ContentPresenter x:Name="perHolder" 
       Content="{TemplateBinding Value, StringFormat='\{\0}&#37; Completed'}" 
       VerticalAlignment="Center" HorizontalAlignment="Right"/>

希望这可以帮助...

于 2013-08-20T16:49:35.050 回答
0

要增加值,请使用实现 的类,IValueConverter如下所述:

http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx

本质上,实现的类IValueConvertervalue在一个名为Convert. 您从此方法返回的值是您真正想要显示的值。考虑:

命名空间锋利{

    public class MyConverter : IValueConverter {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
            // First cast the value to an 'int'.
            Int32 theInputtedValue = (Int32)value;

            // Then return the newly formatted string.
            return String.Format("{0}% Completed", theInputtedValue);
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
            throw new NotImplementedException();
        }
    }

}

请注意,在上面的示例中,值转换器位于命名空间中Sharp。现在我们将其添加到 XAML 定义中:

<Window x:Class="Sharp.MyWindow"
         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" 

         xmlns:lol="clr-namespace:Sharp">

最后一行是我们的值转换器所在的命名空间(也就是说,lol现在将指向SharpCLR 命名空间。

接下来我们将类添加到我们的Window资源中:

<Window.Resources>
    <lol:MyConverter x:Key="TheValueConverter" />
</Window.Resources>

这将创建一个可以在 XAML 中使用的类的实例。所以,到目前为止,我们的 XAML 看起来像这样:

<Window x:Class="Sharp.MyWindow"
         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" 

         xmlns:lol="clr-namespace:Sharp">

    <Window.Resources>
        <lol:MyConverter x:Key="TheValueConverter" />
    </Window.Resources>

现在我们只需将其添加到您的内容演示器中,如下所示:

<ContentPresenter Content="{TemplateBinding Value, Converter={StaticResource TheValueConverter}}" ... />

这告诉它ContentPresenter,当它去呈现值时,它应该使用TheValueConverter实例,它是我们的实例ValueConverter。需要注意两件事: (1) 确保使用实例的名称( TheValueConverter) 而不是定义 ( MyConverter)。(2) 确保将实例名称包含在{StaticResource}.

于 2013-08-20T14:37:52.377 回答