0

我为 ListBox 定义了一些 UserControl

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <ListBox Height="Auto" HorizontalAlignment="Stretch" Name="deliveriesListBox" VerticalAlignment="Stretch" Width="Auto" DataContext="{Binding}" SelectionChanged="deliveriesListBox_SelectionChanged">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Grid x:Name="LayoutRoot" xmlns:src="clr-namespace:App"  Margin="0,5">
                            <src:DItem />
                        </Grid>
                    </DataTemplate>    
                </ListBox.ItemTemplate>                    
            </ListBox>
        </Grid>

用户控件是

<UserControl x:Class="App.DItem"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    d:DesignHeight="480" d:DesignWidth="480">

    <Grid x:Name="LayoutRoot" Margin="0,5">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>

        <TextBlock Grid.Row="0" Grid.Column="0" FontSize="42" HorizontalAlignment="Left"  Text="Hello" VerticalAlignment="Stretch" Margin="0" />
        <TextBlock Grid.Row="1" Grid.Column="1" FontSize="20" HorizontalAlignment="Right" TextAlignment="Right" Margin="0">
                                        <Run Text="OK" />

        </TextBlock>
        <TextBlock Grid.Row="1" Grid.Column="0" FontSize="20" Text="this is working only here.." HorizontalAlignment="Left"  />
    </Grid>
</UserControl>

VS2010 或 Expression Blend 4 中的“所见即所得”编辑器向我显示“这仅在此处工作”和“确定”之间的空间。图片在这里 - http://xrep.eu/pic.jpg

这就是我想要的,但是.. 在模拟器中,手机看起来像http://xrep.eu/emu.jpg

所以,在“这只能在这里工作”和“OK”之间,没有空格。有人可以帮助并告诉我如何定义,“OK”字符串最多在右侧吗?

4

2 回答 2

0

试试这个

 <Grid x:Name="LayoutRoot" Grid.Row="1" Margin="0,5">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <TextBlock Grid.Row="0" FontSize="42" HorizontalAlignment="Left"  Text="Hello" VerticalAlignment="Stretch" Margin="0" />

        <DockPanel Grid.Row="1">
        <TextBlock  FontSize="20" HorizontalAlignment="Right" TextAlignment="Right" Margin="0" DockPanel.Dock="Right">
                                    <Run Text="OK" />

        </TextBlock>
        <TextBlock Grid.Row="1" Grid.Column="0" FontSize="20" Text="this is working only here.." HorizontalAlignment="Left"  />
        </DockPanel>
    </Grid>

干杯

于 2012-11-01T06:38:10.947 回答
0

问题是父控件的宽度。

在设计模式下,正在执行以下代码(在 UserControl 的定义中):

mc:Ignorable="d"
d:DesignHeight="480" d:DesignWidth="480"

这指定了控件的高度,更重要的是,它的宽度。这足够宽,因此您可以看到两段文本之间的空间。

在运行时,这将被忽略,因此Grid(and UserControl) 采用正在显示的项目的宽度。

你有两个选择。

  1. Margin使用orPadding属性放置一些明确的间距。
  2. 将 的HorizontalAlignment设置GridStretch

您可能需要进行一些实验和调整才能获得您想要的效果。

于 2012-11-01T09:38:45.137 回答