WPF ProgressBar в StatusBar не растягивается

Новичок в WPF, и у меня есть следующий XAML

<Window x:Class="Wpf.RossKiosk.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Topmost="True" WindowStartupLocation="CenterScreen" WindowState="Maximized" ResizeMode="NoResize" WindowStyle="None">
<DockPanel LastChildFill="True">

    <StatusBar Name="StatusBarMain" Height="30"  DockPanel.Dock="Bottom">
        <StatusBarItem HorizontalContentAlignment="Left">
            <TextBlock x:Name="TextBlockStatus" Margin="5,0,0,0" />
        </StatusBarItem>
        <StatusBarItem HorizontalContentAlignment="Stretch">
            <ProgressBar x:Name="ProgressBarMain" IsIndeterminate="True" Height="15" />
        </StatusBarItem>
        <StatusBarItem HorizontalContentAlignment="Right">
            <TextBlock x:Name="TextBlockInfo" Margin="5,0,0,0" TextAlignment="Right" />
        </StatusBarItem>
    </StatusBar>

    <Grid Name="GridMain">

        <!-- Dynamically Created buttons -->


    </Grid>


</DockPanel>

I want the ProgressBar to fill the centre portion of the StatusBar but it only shows itself a few pixels in width. Any ideas?


person RedEyedMonster    schedule 23.04.2013    source источник
comment
попробуйте обернуть все элементы строки состояния в сетку и посмотреть, работает ли это.   -  person David    schedule 23.04.2013
comment
Это помогло мне, но мне нужно было добавить определения строк и столбцов сетки, чтобы все работало правильно. ‹P› ‹pre› ‹code› Сетка VerticalAlignment = Растянуть HorizontalAlignment = Растянуть высоту = Auto ToolTip = abc213 Grid.RowDefinitions RowDefinition Height = Auto / RowDefinition RowDefinition Height = / RowDefinition /Grid.RowDefinitions Grid.ColumnDefinitions Ширина определения столбца = / ColumnDefinition ‹/pre› ‹/code› ‹/p›   -  person Scott Shaw-Smith    schedule 27.01.2015
comment
У меня проблемы с форматированием ответа. пожалуйста, проигнорируй   -  person Scott Shaw-Smith    schedule 27.01.2015


Ответы (4)


Это связано с тем, что StatusBar по умолчанию использует DockPanel для размещения своих дочерних элементов. См. Мой вопрос и ответ здесь.

person Kent Boogaart    schedule 23.04.2013

Вам нужно будет использовать сетку. DockPanel или StackPanel вам не хватит. Пытаться:

    <Grid>
    <StatusBar Name="StatusBarMain" Height="30" HorizontalAlignment="Stretch">
    <StatusBarItem HorizontalContentAlignment="Left">
        <TextBlock x:Name="TextBlockStatus" Margin="5,0,0,0" />
    </StatusBarItem>
    <StatusBarItem HorizontalContentAlignment="Stretch">
        <ProgressBar x:Name="ProgressBarMain" IsIndeterminate="True" Height="15" />
    </StatusBarItem>
    <StatusBarItem HorizontalContentAlignment="Right">
        <TextBlock x:Name="TextBlockInfo" Margin="5,0,0,0" TextAlignment="Right" />
    </StatusBarItem>
   </StatusBar>
    </Grid>
person Jeff    schedule 23.04.2013
comment
Причина отрицательного голоса: сетка должна быть заключена в ‹StatusBar›, а не снаружи. - person David; 23.04.2013

Это помогло мне, но мне нужно было добавить определения строк и столбцов сетки, чтобы все работало правильно.

<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="Auto" ToolTip="abc213">
          <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"></ColumnDefinition>
person Scott Shaw-Smith    schedule 27.01.2015

Это растягивает индикатор выполнения до его контейнера

<StatusBarItem  Name="progressBarContainer">
    <ProgressBar Height="{Binding ElementName=progressBarContainer, Path=ActualHeight}" Width="{Binding ElementName=progressBarContainer, Path=ActualWidth}" Value="50" />
</StatusBarItem>
person fab    schedule 23.07.2014