對不起,如果這之前已被回答;我在這裏看過類似的帖子,但建議的修復程序不適合我。ListBox或ItemControl項不佔用所有可用空間
我工作的一個Silverlight 3的項目,我有以下幾點:
<ListBox ItemsSource="{Binding}"
ItemTemplate="{StaticResource TemplateSelector}"
>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
列表框綁定到一個源,它使用不同的DataTemplates使用DataTemplateSelector我在Silverlight中實現。
ListBox似乎忽略樣式屬性HorizontalContentAlignment,即我無法讓項目拉伸到ListBox的整個寬度。
我的DataTemplates是這樣的:
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding DisplayName}" />
<TextBox Text="{Binding Value}" Name="{Binding ID}"/>
</StackPanel>
基本上,我想要的物品,以填補ListBox控件的所有可用空間,並分享他們,以使空間的左半部分由TextBlock的佔領,右半部分被TextBox佔據。
有關如何做到這一點的任何想法?
編輯:@wdavo:這裏是TemplateSelector代碼:
// http://www.codeproject.com/Articles/92439/Silverlight-DataTemplateSelector
public abstract class DataTemplateSelector : ContentControl
{
public virtual DataTemplate SelectTemplate(
object item, DependencyObject container)
{
return null;
}
protected override void OnContentChanged(object oldContent, object newContent)
{
base.OnContentChanged(oldContent, newContent);
ContentTemplate = SelectTemplate(newContent, this);
}
}
public class MyTemplateSelector : DataTemplateSelector
{
public DataTemplate MyTemplate1 { get; set; }
public DataTemplate MyTemplate2 { get; set; }
public DataTemplate MyTemplate3 { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
var element = item;
if (element.GetType() == typeof(MyType1))
return MyTemplate1;
else if (element.GetType() == typeof(MyType2))
return MyTemplate2;
else if (element.GetType() == typeof(MyType3))
return MyTemplate3;
return base.SelectTemplate(item, container);
}
}
和XAML:
<DataTemplate x:Key="TemplateSelector">
<local:MyTemplateSelector Content="{Binding}">
<local:MyTemplateSelector.MyTemplate1>
<DataTemplate>
<StackPanel >
<TextBlock Text="{Binding DisplayName}" />
<TextBox Text="{Binding Value}" Name="{Binding ID}" />
</StackPanel>
</DataTemplate>
</local:MyTemplateSelector.MyTemplate1>
... and so on
</local:MyTemplateSelector>
</DataTemplate>
感謝您的回答。我在哪裏放這個ContentPresenter對象?它是我的DataTemplate選擇器的孩子嗎?或父母? – krebstar 2012-02-15 04:02:32
我認爲你只需要將HorizontalAlignment和HorizontalContentAlignment屬性添加到你的 –
wdavo
2012-02-15 04:04:07
謝謝,這個伎倆。 (將HorizontalAlignment和HorizontalContentAlignment添加到TemplateSelector中,並使用Grid而不是StackPanel。使用StackPanel不起作用 – krebstar 2012-02-15 04:10:54