#c# #listview #uwp #uwp-xaml
#c# #listview #uwp #uwp-xaml
Вопрос:
У меня есть три кнопки внутри ListView.
Я попытался нажать каждую кнопку, однако функция ItemClick не была запущена.
Существует xaml
файл ListView
<UserControl.Resources>
<DataTemplate x:Name="DefaultWideSideItemTemplate" x:DataType="ui:AppMenuItem">
<Grid>
<ui:ButtonWithIcon IconContent="{x:Bind Icon}"
Content="{x:Bind Name}"
Style="{StaticResource TransparentFontButtonStyle}"
/>
</Grid>
</DataTemplate>
<others:SideMenuItemTemplateSelector DefaultTemplate="{StaticResource DefaultWideSideItemTemplate}" x:Key="WideSideItemTemplateSelector"/>
</UserControl.Resources>
<ListView Style="{StaticResource HorizontalCenterListView}"
IsItemClickEnabled="True"
ItemsSource="{x:Bind MenuItemCollection}"
VerticalAlignment="Top"
x:Name="SideMenuListView"
Loaded="SideMenuListView_Loaded"
ItemClick="SideMenuListView_ItemClick"
ItemTemplateSelector="{StaticResource WideSideItemTemplateSelector}">
</ListView>
Существует код, в котором был определен ItemClick .
public event EventHandler<AppMenuItem> SideMenuItemClick;
private void SideMenuListView_ItemClick(object sender, ItemClickEventArgs e)
{
// DO SOMETHING HERE
}
Существует xaml
файл ui:ButtonWithIcon
<Style x:Key="TransparentFontButtonStyle" TargetType="ui:ButtonWithIcon">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="FontSize" Value="30"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="Margin" Value="0,32,0,7"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ui:ButtonWithIcon">
<StackPanel>
<TextBlock
x:Name="IconContent"
Text="{Binding IconContent, RelativeSource={RelativeSource TemplatedParent}}"
HorizontalAlignment="Center"
FontFamily="{StaticResource SymbolThemeFontFamily}"
FontSize="30"/>
<TextBlock
x:Name="Text"
Text="{TemplateBinding Content}"
HorizontalAlignment="Center"
FontSize="14"
Margin="0,10,0,0"/>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Что я неправильно понял в ListView? Кнопки нельзя использовать в ListView?
Обновление: ButtonWithIcon
public class ButtonWithIcon : Button
{
public static readonly DependencyProperty IconContentProperty =
DependencyProperty.Register("IconContent", typeof(string), typeof(ButtonWithIcon), new PropertyMetadata(default));
public string IconContent
{
get { return (string)GetValue(IconContentProperty); }
set { SetValue(IconContentProperty, value); }
}
}
Обновление 2:
<DataTemplate x:Name="DefaultWideSideItemTemplate" x:DataType="ui:AppMenuItem">
<Grid>
<StackPanel Margin="0,32,0,7">
<TextBlock Text="{x:Bind Icon}"
HorizontalAlignment="Center"
FontFamily="{StaticResource SymbolThemeFontFamily}"
FontSize="30"/>
<TextBlock
Text="{x:Bind Name}"
HorizontalAlignment="Center"
Margin="0,10,0,0"
FontSize="14"/>
</StackPanel>
</Grid>
</DataTemplate>
Ответ №1:
Если ui:ButtonWithIcon
это пользовательский элемент управления кнопкой, то это ожидаемое поведение. Когда вы нажимаете на пользовательскую кнопку, событие щелчка фиксируется кнопкой, поэтому ListView
событие не запускается ItemClick
. Простой способ подтверждения заключается в том, что вы можете щелкнуть по месту, которое не принадлежит пользовательской кнопке. Это должно вызвать ItemClick
событие ListView.
Обновление: поскольку ваш код слишком запутанный, я провел простой тест, используя часть вашего кода:
<ListView HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
IsItemClickEnabled="True"
ItemsSource="{x:Bind MenuItemCollection}"
x:Name="SideMenuListView"
Loaded="SideMenuListView_Loaded"
ItemClick="SideMenuListView_ItemClick"
>
<ListView.ItemTemplate>
<DataTemplate >
<Grid>
<StackPanel Margin="0,32,0,7">
<TextBlock
Text="{Binding}"
HorizontalAlignment="Center"
Margin="0,10,0,0"
FontSize="14"/>
</StackPanel>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Это работает правильно.
Вы могли бы удалить дополнительные части вашего кода, чтобы сузить проблему. Начните с простого примера, подобного приведенному выше.
Комментарии:
1. Пожалуйста, ознакомьтесь с обновлением.
ButtonWithIcon
Это пользовательская кнопка. Есть ли способ разрешитьListView
запуск события ItemClick?2. Таким образом, пользовательская кнопка является элементом управления кнопкой. Если вы настаиваете на использовании элемента управления button, единственный способ — отключить кнопку. Установить
button.IsEnabled=False
.3. Есть ли другой способ добиться кнопки, подобной двум текстовым блокам, как
ButtonWithIcon
я упоминал ранее? Спасибо4. Существуют разные способы создания элемента управления, который выглядит как кнопка. Вы можете выбрать элементы управления, которые вам нравятся. Для меня я бы использовал границу и некоторые текстовые блоки
5. Спасибо за ваше предложение. Я меняю его на обновление 2, как когда-либо, когда когда-либо нажимаю на каждый текстовый блок, ItemClick все еще не срабатывает?