안녕하세요, 목록 상자를 사용하여 항목 목록을 표시합니다. 목록 상자에 모든 항목에 대한 토글 버튼이 있습니다. 토글 버튼을 클릭하면 토글 버튼의 상태가 눌러집니다. 그러나 내가 목록 상자에서 아래로 스크롤하고 다시 scolls 때. 토글 버튼 상태가 눌러지지 않습니다. 이걸 어떻게 막을 수 있습니까?Wpf 목록 상자 및 토글 버튼
Heres는 내 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>
을 Heres 바인딩 코드
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 });
}
}
그리고 heres는 클릭 이벤트
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();
}
위의 텍스트를 모두 들여 쓰기 할 때 Shift + Tab을 사용하여 코드의 레이아웃을 편집하고 싶을 수도 있습니다. –
모든 컨트롤 템플릿과 스타일에서 동일한 문제가 발생합니까? – Amsakanna
iam이 항목을 선택한 다음 목록의 맨 아래로 내려 가서 다시 scolls 할 때만 발생합니다. – Tan