[英]Listbox item change on click WP7
我在WP7中有一個綁定列表框,其中包含每個部分中的一組項目,我想在單擊時更改圖標的路徑,以便更改單擊的圖標。 這是我的XAML數據,需要在點擊按鈕上更改Italic和Bold中的Stackpanel。
<ListBox Height="768" HorizontalAlignment="Left" Name="listBox1" Margin="0,0,0,0"
VerticalAlignment="Top" Width="480" Grid.RowSpan="2" >
<ListBox.ItemTemplate>
<DataTemplate>
<Button BorderBrush="Black" Width="460" Height="100">
<Button.Content>
<StackPanel Orientation="Horizontal" Height="80" Width="400">
<Image Source="{Binding Image}" Width="80" Height="50"/>
<StackPanel Orientation="Vertical" Height="80">
<StackPanel Orientation="Horizontal" Height="40">
<TextBlock Width="200" FontSize="28" Text="{Binding Name}" Height="50"/>
<StackPanel Orientation="Horizontal">
***<Image Source="{Binding OnOff}" Width="100" Height="40" Tap="Image_Tap"/>***
</StackPanel>
</StackPanel>
</StackPanel>
</StackPanel>
</Button.Content>
</Button>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我已經用這種方式填充了這個列表框
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
List<settings> settingsData = new List<settings>();
settingsData.Add(new settings("Administrator","Images/ad.png",""));
settingsData.Add(new settings("Wi-Fi","Images/wifi.png","Images/off.png"));
settingsData.Add(new settings("Bluetooth", "Images/BlueTooth.png", "Images/On.png"));
settingsData.Add(new settings("Airplane Mode", "Images/747.png", "Images/off.png"));
settingsData.Add(new settings("VPN", "", ""));
settingsData.Add(new settings("Hotspot", "", "Images/unchecked.png"));
settingsData.Add(new settings("NFC", "", "Images/checked.png"));
settingsData.Add(new settings("Sound","Images/sound.png",""));
settingsData.Add(new settings("Display","Images/display.png",""));
listBox1.ItemsSource = settingsData;
}
請幫助..!!
由於您已將Image
綁定到settings
對象的Image
屬性,只需更改其中的路徑( settings.Image = "Images/newImage.png"
),列表應該選擇對圖像路徑的更改。
為此,請訂閱OnMouseLeftButtonDown
或OnMouseLeftButtonUp
事件。
編輯您也可以將OnOff屬性作為bool類型並為此提供轉換器。 通常,所有項目的開啟和關閉圖標都相同(提供UI一致性)。 這是轉換器類:
public class OnOffImageConverter : IValueConverter
{
public object Convert (object value, Type targetType, object parameter, CultureInfo culture)
{
if ((bool)value)
{
return new BitmapImage (new Uri ("Images/On.png", UriKind.Relative));
}
else
{
return new BitmapImage (new Uri ("Images/Off.png", UriKind.Relative));
}
}
public object ConvertBack (object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException ();
}
}
在xaml中為轉換器定義靜態資源:
<UserControl.Resources>
<instance:OnOffImageConverter x:Key="OnOff" />
</UserControl.Resources>
你如何使用它:
<Image Source="{Binding OnOff, Converter={StaticResource OnOff}}" Width="100" Height="40" />
你的設置類:
public class Settings : INotifyPropertyChanged
{
public Settings(string name, string image, bool onOff)
{
Name = name;
Image = new BitmapImage (new Uri(image, UriKind.Absolute));
OnOff = onOff;
}
public string Name { get; set; }
public ImageSource Image { get; set; }
private bool m_onOff;
public bool OnOff
{
get { return m_onOff; }
set {
m_onOff = value;
if (PropertyChanged != null)
{
PropertyChanged (this, new PropertyChangedEventArgs ("OnOff"));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
我認為您需要實現INotifyPropertyChanged接口以通知列表有關基礎類實例中已更改的屬性。 此外,如果您計划在綁定后將其他元素添加到列表中,則應將其作為ObservableCollection。
我已經測試了訂閱SelectionChanged事件。 但是,由於我沒有在移動設備上開發我不知道任何分接選項,也許你可以使用Image_Tap事件。
listBox1.SelectionChanged += new SelectionChangedEventHandler (listBox1_SelectionChanged);
void listBox1_SelectionChanged (object sender, SelectionChangedEventArgs e)
{
foreach (Settings item in e.AddedItems)
{
item.OnOff = !item.OnOff;
}
}
快速解決方案是,
private void Image_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
var imageSource = ((sender as Image).Source as BitmapImage).UriSource.OriginalString;
if (imageSource.Contains("On"))
{
(sender as Image).Source = new BitmapImage(new Uri("Images/Off.png", UriKind.Relative));
}
else
{
(sender as Image).Source = new BitmapImage(new Uri("Images/On.png", UriKind.Relative));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.