我在HeaderedContentControl的Header中有一個按鈕當我點擊按鈕時,該命令正確觸發,但是因爲實際的listboxitem未被選中,所以我沒有數據可用。如何在首先選擇子控件或與其進行交互時導致HeaderedContentControl被選中?Silverlight HeaderedContentControl.Header焦點問題
這裏是我的控制
<ListBox x:Name="SearchList"
Grid.Row="1"
Grid.Column="0"
Background="Transparent"
BorderThickness="0"
ItemsSource="{Binding Path=SearchResults}"
SelectedItem="{Binding Path=SelectedResult,Mode=TwoWay,Converter={StaticResource DebugConverter}}"
HorizontalContentAlignment="Stretch"
HorizontalAlignment="Stretch"
ScrollViewer.VerticalScrollBarVisibility="Visible" >
<ListBox.ItemTemplate>
<DataTemplate>
<Border Width="600"
Margin="20,2,0,0"
Style="{StaticResource BorderStyle}">
<sb:BindingHelper.Binding>
<sb:BindingList>
<sb:RelativeSourceBinding TargetProperty="Background"
RelativeMode="FindAncestor"
AncestorType="ListBoxItem"
Converter="{StaticResource DebugConverter}"
ConverterParameter="AlternatingRows" />
</sb:BindingList>
</sb:BindingHelper.Binding>
<toolkit:HeaderedContentControl IsTabStop="True">
<toolkit:HeaderedContentControl.Header>
<Grid Width="575"
Margin="5,5,10,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0"
Grid.Row="0"
Text="{Binding Path=PatientName}"
HorizontalAlignment="Left"
Margin="0" />
<Button Grid.Column="3"
Grid.Row="0"
Content="Complete Survey"
IsTabStop="False">
<sb:BindingHelper.Binding>
<sb:BindingList>
<sb:RelativeSourceBinding Path="DataContext.OpenSurveyCommand"
TargetProperty="Command"
RelativeMode="FindAncestor"
AncestorType="ListBox"
Converter="{StaticResource DebugConverter}"
ConverterParameter="SurveyCommandButton" />
<sb:RelativeSourceBinding Path="DataContext.HasFocus"
TargetProperty="Focus" />
</sb:BindingList>
</sb:BindingHelper.Binding>
</Button>
</Grid>
</toolkit:HeaderedContentControl.Header>
<sb:BindingHelper.Binding>
<sb:RelativeSourceBinding TargetProperty="IsExpanded"
Path="IsSelected"
RelativeMode="FindAncestor"
AncestorType="ListBoxItem"
BindingMode="TwoWay" />
</sb:BindingHelper.Binding>
<Grid Margin="5,2,0,2">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="275" />
<ColumnDefinition Width="250" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0"
Grid.Column="0"
Text="{Binding MRN,Converter={StaticResource StringLabelConverter},ConverterParameter=MRN}" />
<TextBlock Grid.Row="1"
Grid.Column="0"
Style="{StaticResource SearchResultsTextBlockStyle }"
Text="{Binding OriginalVisitNumber,Converter={StaticResource StringLabelConverter},ConverterParameter='Original Visit Number'}" />
<TextBlock Grid.Row="2"
Grid.Column="0"
Style="{StaticResource SearchResultsTextBlockStyle }"
Text="{Binding OriginalAdmitDate,Converter={StaticResource StringLabelConverter},ConverterParameter='Original Admit Date'}" />
<TextBlock Grid.Row="3"
Grid.Column="0"
Style="{StaticResource SearchResultsTextBlockStyle }"
Text="{Binding OriginalReason,Converter={StaticResource StringLabelConverter},ConverterParameter='Original Reason'}" />
<TextBlock Grid.Row="1"
Grid.Column="1"
Style="{StaticResource SearchResultsTextBlockStyle }"
Text="{Binding ReAdmitVisitNumber,Converter={StaticResource StringLabelConverter},ConverterParameter='ReAdmit Visit Number'}" />
<TextBlock Grid.Row="2"
Grid.Column="1"
Style="{StaticResource SearchResultsTextBlockStyle }"
Text="{Binding ReAdmitDate,Converter={StaticResource StringLabelConverter},ConverterParameter='Readmit Date'}" />
<TextBlock Grid.Row="3"
Grid.Column="1"
Style="{StaticResource SearchResultsTextBlockStyle }"
Text="{Binding ReAdmitReason,Converter={StaticResource StringLabelConverter},ConverterParameter='ReAdmit Reason'}" />
</Grid>
</toolkit:HeaderedContentControl>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
搜索結束後,默認情況下可以選擇第一行嗎? – 2011-04-05 01:47:52
虐待看看是否修復它... – ecathell 2011-04-05 13:09:04
實際的修復涉及到一些代碼洗牌,我將實際結果列表對象移動到viewModels的集合中,並將按鈕命令的代碼放在該viewModel中,而不是父VM。這允許更多的靈活性。 – ecathell 2011-04-11 20:01:39