嗨iam使用列表框顯示項目列表。在列表框中,我每個項目都有一個togglebutton。當我點擊切換按鈕時,按鈕的狀態被按下。但是當我在列表框中滾動並再次滾動時。沒有按下togglebutton狀態。我如何防止這一點,請幫助。Wpf Listbox和Togglebutton
繼承人我的ItemTemplate
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,3,0,0">
<Border BorderBrush="Black" BorderThickness="1,1,1,1">
<Border.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" MappingMode="RelativeToBoundingBox">
<GradientStop Color="#FFECECEC" Offset="1"/>
<GradientStop Color="#FFE8E8E8"/>
<GradientStop Color="#FFBDBDBD" Offset="0.153"/>
<GradientStop Color="#FFE8E8E8" Offset="0.904"/>
</LinearGradientBrush>
</Border.Background>
<Border.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}}}" Value="True">
<Setter Property="Border.Height" Value="100"/>
<Setter Property="Border.Background">
<Setter.Value>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" MappingMode="RelativeToBoundingBox">
<GradientStop Color="DarkGray" Offset="1"/>
<GradientStop Color="#FFE8E8E8"/>
<GradientStop Color="#FFBDBDBD" Offset="0.153"/>
<GradientStop Color="DarkGray" Offset="0.904"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="500"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="55"/>
</Grid.ColumnDefinitions>
<!--Pick number-->
<StackPanel Grid.Column="0" VerticalAlignment="Center" Orientation="Vertical">
<TextBlock Text="{Binding Path=FtgNamn}" FontWeight="Bold" FontSize="22pt" FontFamily="Calibri"/>
<TextBlock Text="{Binding Path=LevsAttBeskr}" FontSize="18pt" FontFamily="Calibri"/>
</StackPanel>
<!--Pick Quantity-->
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="{Binding Path=Antal}" FontSize="44pt" FontFamily="Calibri"/>
</StackPanel>
<!-- Checkbox-->
<StackPanel Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Center">
<ToggleButton Name="Check" Width="40" Height="40" Click="Check_Click" Tag="{Binding Path=Plocklista}">
<ToggleButton.Style>
<Style TargetType="ToggleButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Border x:Name="InnerBorder" Background="White" BorderBrush="Black" BorderThickness="1"/>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="InnerBorder" Property="Background">
<Setter.Value>
<ImageBrush ImageSource="/Images/button_ok.png"/>
</Setter.Value>
</Setter>
<Setter TargetName="InnerBorder" Property="BorderThickness" Value="0"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ToggleButton.Style>
</ToggleButton>
</StackPanel>
</Grid>
<Border BorderBrush="Darkgray" BorderThickness="0,0,1,0">
</Border>
<TextBlock Width="100" Text="{Binding Path=Quantity}" FontSize="44pt" FontFamily="Calibri"/>
<CheckBox Width="78"/>
</StackPanel>
</Border>
</StackPanel>
</DataTemplate>
繼承人的綁定代碼
delegate void FillPickHeaderDelegate(PickHeaderDoc[] pickHeaderDocs);
private void FillPickList(PickHeaderDoc[] pickHeaderDoc) {
if(lbAllPickAssignments.Dispatcher.CheckAccess()) {
lbAllPickAssignments.ItemsSource = pickHeaderDoc;
lbAllPickAssignments.UnselectAll();
} else {
lbAllPickAssignments.Dispatcher.Invoke(new FillPickHeaderDelegate(FillPickList), new object[] { pickHeaderDoc });
}
}
而且繼承人的Click事件
private void Check_Click(object sender, RoutedEventArgs e) {
ToggleButton btn = (ToggleButton) sender;
if(btn.IsChecked.Value == true) {
m_checkedList.Add(Convert.ToInt32(btn.Tag));
} else {
m_checkedList.Remove(Convert.ToInt32(btn.Tag));
}
txtblockPickCount.Text = m_checkedList.Count.ToString();
}
可能要編輯代碼的佈局(在VS按Shift + Tab選擇所有上面的文字時,它縮進以下) – 2010-05-05 09:13:23
你面對所有這些CONTROLTEMPLATES和風格刪除同樣的問題? – Amsakanna 2010-05-05 09:53:04
只有當我選擇一個項目,然後向下移動到列表的底部然後重新爬起來時纔會發生。 – Tan 2010-05-05 10:05:41