如何将ProgressBar最大负值绑定到WPF中的文本块

时间:2019-07-02 09:32:44

标签: wpf data-binding expression-blend-4

在Expression blend中,我有一个progressBar和两个textblock。我将第一个文本块绑定到Value属性。我需要将第二个文本块绑定到Maximum-Value属性,以读取剩余的填充进度条的数量。如何在XAML中完成此操作?

因为我想在修改progressBar值时查看设计器视图中的更改

这是视图: https://i.imgur.com/yTF1rRl.png

代码:

$request = app(\Illuminate\Http\Request);
$ip      = $request->ip();

1 个答案:

答案 0 :(得分:1)

这是一种基于多转换器的方法。

标记:

<Grid x:Name="LayoutRoot">
    <Grid.RowDefinitions>
        <RowDefinition Height="60"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <ProgressBar x:Name="progressBar" Height="41"  
                 Grid.ColumnSpan="3"
                 Value="66"/>
    <TextBlock x:Name="Value"
               Grid.Column="0" 
               Grid.Row="1"
               Text="{Binding Value, ElementName=progressBar}" VerticalAlignment="Top"  
               TextAlignment="Center"
               Foreground="#FF40B617"/>
    <TextBlock x:Name="Left" 
               Grid.Column="2" 
               Grid.Row="1"
               TextAlignment="Center"
               VerticalAlignment="Top" 
               Foreground="#FF8F8F8F">
        <TextBlock.Text>
            <MultiBinding Converter="{local:AmountLeftMultiConverter}" StringFormat="{}{0:n0}">
                <Binding Path="Maximum" ElementName="progressBar"/>
                <Binding Path="Value"  ElementName="progressBar"/>
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>
</Grid>

转换器将从第一个绑定中减去第二个绑定给出的任何内容。这些值将通过数组传递到多转换器。

转换器。我的是在草稿应用程序中,因此您的命名空间将有所不同:

    using System;
    using System.Globalization;
    using System.Windows.Data;
    using System.Windows.Markup;

    namespace wpf_99
    {
        public class AmountLeftMultiConverter : MarkupExtension, IMultiValueConverter
        {
            public double Multiplier { get; set; }

            public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
            {
                double toAdd = System.Convert.ToDouble(values[0]);
                double toSubtract = System.Convert.ToDouble(values[1]);

                return toAdd - toSubtract;
            }

            public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
            {
                throw new NotImplementedException();
            }

            public override object ProvideValue(IServiceProvider serviceProvider)
            {
                return this;
            }
        }
    }

由于这也是一个标记扩展,因此在使用之前无需在任何资源中声明它。