mirror of
https://github.com/Nioux/AideDeJeu.git
synced 2025-10-29 22:45:44 +00:00
Début ajout licence OGL dans la page About
This commit is contained in:
parent
3033b60368
commit
72b88d9b08
10 changed files with 306 additions and 13 deletions
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="11" android:versionName="1.10" package="com.nioux.aidedejeu" android:installLocation="auto">
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="12" android:versionName="1.11" package="com.nioux.aidedejeu" android:installLocation="preferExternal">
|
||||
<uses-sdk android:minSdkVersion="15" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<application android:label="Aide de Jeu" android:icon="@drawable/icon"></application>
|
||||
|
|
|
|||
70
AideDeJeu/AideDeJeu/OGL.html
Normal file
70
AideDeJeu/AideDeJeu/OGL.html
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title></title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>
|
||||
OGL License
|
||||
</h1>
|
||||
<div>
|
||||
Permission to copy, modify and distribute the files collectively known as the System Reference Document 5.1 (“SRD5”) is granted solely through the use of the Open Gaming License, Version 1.0a. This material is being released using the Open Gaming License Version 1.0a and you should read and understand the terms of that License before using this material.
|
||||
</div>
|
||||
<div>
|
||||
The text of the Open Gaming License itself is not Open Game Content. Instructions on using the License are provided within the License itself. The following items are designated Product Identity, as defined in Section 1(e) of the Open Game License Version 1.0a, and are subject to the Conditions set forth in Section 7 of the OGL, and are not Open Content: Dungeons & Dragons, D&D, Player’s Handbook, Dungeon Master, Monster Manual, d20 System, Wizards of the Coast, d20 (when used as a trademark), Forgotten Realms, Faerûn, proper names (including those used in the names of Spells or items), places, Underdark, Red Wizard of Thay, the City of Union, Heroic Domains of Ysgard, EverChanging Chaos of Limbo, Windswept Depths of Pandemonium, Infinite Layers of the Abyss, Tarterian Depths of Carceri, Gray Waste of Hades, Bleak Eternity of Gehenna, Nine Hells of Baator, Infernal Battlefield of Acheron, Clockwork Nirvana of Mechanus, Peaceable Kingdoms of Arcadia, Seven Mounting Heavens of Celestia, Twin Paradises of Bytopia, Blessed Fields of Elysium, Wilderness of the Beastlands, Olympian Glades of Arborea, Concordant Domain of the Outlands, Sigil, Lady of Pain, Book of Exalted Deeds, Book of Vile Darkness, Beholder, gauth, Carrion Crawler, tanar’ri, baatezu, Displacer Beast, Githyanki, Githzerai, Mind Flayer, illithid, Umber Hulk, Yuan-ti.
|
||||
</div>
|
||||
<div>
|
||||
All of the rest of the SRD5 is Open Game Content as described in Section 1(d) of the License. The terms of the Open Gaming License Version 1.0a are as follows:
|
||||
</div>
|
||||
<div>
|
||||
OPEN GAME License Version 1.0a The following text is the property of Wizards of the Coast, LLC. and is Copyright 2000 Wizards of the Coast, Inc ("Wizards"). All Rights Reserved.
|
||||
</div>
|
||||
<div>
|
||||
1. Definitions: (a)"Contributors" means the copyright and/or trademark owners who have contributed Open Game Content; (b)"Derivative Material" means copyrighted material including derivative works and translations (including into other computer languages), potation, modification, correction, addition, extension, upgrade, improvement, compilation, abridgment or other form in which an existing work may be recast, transformed or adapted; (c) "Distribute" means to reproduce, License, rent, lease, sell, broadcast, publicly display, transmit or otherwise distribute; (d)"Open Game Content" means the game mechanic and includes the methods, procedures, processes and routines to the extent such content does not embody the Product Identity and is an enhancement over the prior art and any additional content clearly identified as Open Game Content by the Contributor, and means any work covered by this License, including translations and derivative works under copyright law, but specifically excludes Product Identity. (e) "Product Identity" means product and product line names, logos and identifying marks including trade dress; artifacts; creatures characters; stories, storylines, plots, thematic elements, dialogue, incidents, Language, artwork, symbols, designs, depictions, likenesses, formats, poses, concepts, themes and graphic, photographic and other visual or audio representations; names and descriptions of characters, Spells, enchantments, personalities, teams, personas, likenesses and Special abilities; places, locations, environments, creatures, Equipment, magical or supernatural Abilities or effects, logos, symbols, or graphic designs; and any other trademark or registered trademark clearly identified as Product identity by the owner of the Product Identity, and which specifically excludes the OPEN Game Content; (f) "Trademark" means the logos, names, mark, sign, motto, designs that are used by a Contributor to Identify itself or its products or the associated products contributed to the Open Game License by the Contributor (g) "Use", "Used" or "Using" means to use, Distribute, copy, edit, format, modify, translate and otherwise create Derivative Material of Open Game Content. (h) "You" or "Your" means the licensee in terms of this agreement.
|
||||
</div>
|
||||
<div>
|
||||
2. The License: This License applies to any Open Game Content that contains a notice indicating that the Open Game Content may only be Used under and in terms of this License. You must affix such a notice to any Open Game Content that you Use. No terms may be added to or subtracted from this License except as described by the License itself. No other terms or Conditions may be applied to any Open Game Content distributed using this License.
|
||||
</div>
|
||||
<div>
|
||||
3.Offer and Acceptance: By Using the Open Game Content You indicate Your acceptance of the terms of this License.
|
||||
</div>
|
||||
<div>
|
||||
4. Grant and Consideration: In consideration for agreeing to use this License, the Contributors grant You a perpetual, worldwide, royalty-free, nonexclusive License with the exact terms of this License to Use, the Open Game Content.
|
||||
</div>
|
||||
<div>
|
||||
5.Representation of Authority to Contribute: If You are contributing original material as Open Game Content, You represent that Your Contributions are Your original Creation and/or You have sufficient rights to grant the rights conveyed by this License.
|
||||
</div>
|
||||
<div>
|
||||
6.Notice of License Copyright: You must update the COPYRIGHT NOTICE portion of this License to include the exact text of the COPYRIGHT NOTICE of any Open Game Content You are copying, modifying or distributing, and You must add the title, the copyright date, and the copyright holder's name to the COPYRIGHT NOTICE of any original Open Game Content you Distribute.
|
||||
</div>
|
||||
<div>
|
||||
7. Use of Product Identity: You agree not to Use any Product Identity, including as an indication as to compatibility, except as expressly licensed in another, independent Agreement with the owner of each element of that Product Identity. You agree not to indicate compatibility or co-adaptability with any Trademark or Registered Trademark in conjunction with a work containing Open Game Content except as expressly licensed in another, independent Agreement with the owner of such Trademark or Registered Trademark. The use of any Product Identity in Open Game Content does not constitute a challenge to the ownership of that Product Identity. The owner of any Product Identity used in Open Game Content shall retain all rights, title and interest in and to that Product Identity.
|
||||
</div>
|
||||
<div>
|
||||
8. Identification: If you distribute Open Game Content You must clearly indicate which portions of the work that you are distributing are Open Game Content.
|
||||
</div>
|
||||
<div>
|
||||
9. Updating the License: Wizards or its designated Agents may publish updated versions of this License. You may use any authorized version of this License to copy, modify and distribute any Open Game Content originally distributed under any version of this License.
|
||||
</div>
|
||||
<div>
|
||||
10. Copy of this License: You MUST include a copy of this License with every copy of the Open Game Content You Distribute.
|
||||
</div>
|
||||
<div>
|
||||
11. Use of Contributor Credits: You may not market or advertise the Open Game Content using the name of any Contributor unless You have written permission from the Contributor to do so.
|
||||
</div>
|
||||
<div>
|
||||
12. Inability to Comply: If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Open Game Content due to statute, judicial order, or governmental regulation then You may not Use any Open Game Material so affected.
|
||||
</div>
|
||||
<div>
|
||||
13. Termination: This License will terminate automatically if You fail to comply with all terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses shall survive the termination of this License.
|
||||
</div>
|
||||
<div>
|
||||
14. Reformation: If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable.
|
||||
</div>
|
||||
<div>
|
||||
15. COPYRIGHT NOTICE Open Game License v 1.0a Copyright 2000, Wizards of the Coast, LLC. System Reference Document 5.1 Copyright 2016, Wizards of the Coast, LLC.; Authors Mike Mearls, Jeremy Crawford, Chris Perkins, Rodney Thompson, Peter Lee, James Wyatt, Robert J. Schwalb, Bruce R. Cordell, Chris Sims, and Steve Townshend, based on original material by E. Gary Gygax and Dave Arneson.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Windows.Input;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace AideDeJeu.Tools
|
||||
|
|
@ -24,4 +26,165 @@ namespace AideDeJeu.Tools
|
|||
((SearchBar)sender).SearchCommand?.Execute(e.NewTextValue);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class BehaviorBase<T> : Behavior<T> where T : BindableObject
|
||||
{
|
||||
public T AssociatedObject { get; private set; }
|
||||
|
||||
protected override void OnAttachedTo(T bindable)
|
||||
{
|
||||
base.OnAttachedTo(bindable);
|
||||
AssociatedObject = bindable;
|
||||
|
||||
if (bindable.BindingContext != null)
|
||||
{
|
||||
BindingContext = bindable.BindingContext;
|
||||
}
|
||||
|
||||
bindable.BindingContextChanged += OnBindingContextChanged;
|
||||
}
|
||||
|
||||
protected override void OnDetachingFrom(T bindable)
|
||||
{
|
||||
base.OnDetachingFrom(bindable);
|
||||
bindable.BindingContextChanged -= OnBindingContextChanged;
|
||||
AssociatedObject = null;
|
||||
}
|
||||
|
||||
void OnBindingContextChanged(object sender, EventArgs e)
|
||||
{
|
||||
OnBindingContextChanged();
|
||||
}
|
||||
|
||||
protected override void OnBindingContextChanged()
|
||||
{
|
||||
base.OnBindingContextChanged();
|
||||
BindingContext = AssociatedObject.BindingContext;
|
||||
}
|
||||
}
|
||||
public class EventToCommandBehavior : BehaviorBase<View>
|
||||
{
|
||||
Delegate eventHandler;
|
||||
|
||||
public static readonly BindableProperty EventNameProperty = BindableProperty.Create("EventName", typeof(string), typeof(EventToCommandBehavior), null, propertyChanged: OnEventNameChanged);
|
||||
public static readonly BindableProperty CommandProperty = BindableProperty.Create("Command", typeof(ICommand), typeof(EventToCommandBehavior), null);
|
||||
public static readonly BindableProperty CommandParameterProperty = BindableProperty.Create("CommandParameter", typeof(object), typeof(EventToCommandBehavior), null);
|
||||
public static readonly BindableProperty InputConverterProperty = BindableProperty.Create("Converter", typeof(IValueConverter), typeof(EventToCommandBehavior), null);
|
||||
|
||||
public string EventName
|
||||
{
|
||||
get { return (string)GetValue(EventNameProperty); }
|
||||
set { SetValue(EventNameProperty, value); }
|
||||
}
|
||||
|
||||
public ICommand Command
|
||||
{
|
||||
get { return (ICommand)GetValue(CommandProperty); }
|
||||
set { SetValue(CommandProperty, value); }
|
||||
}
|
||||
|
||||
public object CommandParameter
|
||||
{
|
||||
get { return GetValue(CommandParameterProperty); }
|
||||
set { SetValue(CommandParameterProperty, value); }
|
||||
}
|
||||
|
||||
public IValueConverter Converter
|
||||
{
|
||||
get { return (IValueConverter)GetValue(InputConverterProperty); }
|
||||
set { SetValue(InputConverterProperty, value); }
|
||||
}
|
||||
|
||||
protected override void OnAttachedTo(View bindable)
|
||||
{
|
||||
base.OnAttachedTo(bindable);
|
||||
RegisterEvent(EventName);
|
||||
}
|
||||
|
||||
protected override void OnDetachingFrom(View bindable)
|
||||
{
|
||||
DeregisterEvent(EventName);
|
||||
base.OnDetachingFrom(bindable);
|
||||
}
|
||||
|
||||
void RegisterEvent(string name)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(name))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
EventInfo eventInfo = AssociatedObject.GetType().GetRuntimeEvent(name);
|
||||
if (eventInfo == null)
|
||||
{
|
||||
throw new ArgumentException(string.Format("EventToCommandBehavior: Can't register the '{0}' event.", EventName));
|
||||
}
|
||||
MethodInfo methodInfo = typeof(EventToCommandBehavior).GetTypeInfo().GetDeclaredMethod("OnEvent");
|
||||
eventHandler = methodInfo.CreateDelegate(eventInfo.EventHandlerType, this);
|
||||
eventInfo.AddEventHandler(AssociatedObject, eventHandler);
|
||||
}
|
||||
|
||||
void DeregisterEvent(string name)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(name))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (eventHandler == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
EventInfo eventInfo = AssociatedObject.GetType().GetRuntimeEvent(name);
|
||||
if (eventInfo == null)
|
||||
{
|
||||
throw new ArgumentException(string.Format("EventToCommandBehavior: Can't de-register the '{0}' event.", EventName));
|
||||
}
|
||||
eventInfo.RemoveEventHandler(AssociatedObject, eventHandler);
|
||||
eventHandler = null;
|
||||
}
|
||||
|
||||
void OnEvent(object sender, object eventArgs)
|
||||
{
|
||||
if (Command == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
object resolvedParameter;
|
||||
if (CommandParameter != null)
|
||||
{
|
||||
resolvedParameter = CommandParameter;
|
||||
}
|
||||
else if (Converter != null)
|
||||
{
|
||||
resolvedParameter = Converter.Convert(eventArgs, typeof(object), null, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
resolvedParameter = eventArgs;
|
||||
}
|
||||
|
||||
if (Command.CanExecute(resolvedParameter))
|
||||
{
|
||||
Command.Execute(resolvedParameter);
|
||||
}
|
||||
}
|
||||
|
||||
static void OnEventNameChanged(BindableObject bindable, object oldValue, object newValue)
|
||||
{
|
||||
var behavior = (EventToCommandBehavior)bindable;
|
||||
if (behavior.AssociatedObject == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
string oldEventName = (string)oldValue;
|
||||
string newEventName = (string)newValue;
|
||||
|
||||
behavior.DeregisterEvent(oldEventName);
|
||||
behavior.RegisterEvent(newEventName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ namespace AideDeJeu.ViewModels
|
|||
{
|
||||
Title = "À propos de ...";
|
||||
|
||||
OpenWebCommand = new Command(() => Device.OpenUri(new Uri("https://nioux.github.io/AideDeJeu/")));
|
||||
OpenWebCommand = new Command<string>((param) => Device.OpenUri(new Uri(param)));
|
||||
UpdateDataCommand = new Command(async() => await ExecuteUpdateDataCommandAsync());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
using AideDeJeu.Tools;
|
||||
using AideDeJeuLib.Spells;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
|
@ -18,6 +20,7 @@ namespace AideDeJeu.ViewModels
|
|||
{
|
||||
SetProperty(ref _Item, value);
|
||||
OnPropertyChanged(nameof(Description));
|
||||
OnPropertyChanged(nameof(DescriptionList));
|
||||
OnPropertyChanged(nameof(TypeLevel));
|
||||
OnPropertyChanged(nameof(CastingTime));
|
||||
OnPropertyChanged(nameof(Range));
|
||||
|
|
@ -39,6 +42,21 @@ namespace AideDeJeu.ViewModels
|
|||
}
|
||||
}
|
||||
|
||||
public ObservableCollection<FormattedString> DescriptionList
|
||||
{
|
||||
get
|
||||
{
|
||||
var list = new ObservableCollection<FormattedString>();
|
||||
list.Add(TypeLevel);
|
||||
list.Add(CastingTime);
|
||||
list.Add(Range);
|
||||
list.Add(Components);
|
||||
list.Add(Duration);
|
||||
list.Add(TypeLevel);
|
||||
return list;
|
||||
}
|
||||
}
|
||||
|
||||
public FormattedString TypeLevel
|
||||
{
|
||||
get
|
||||
|
|
|
|||
|
|
@ -16,26 +16,44 @@
|
|||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<StackLayout BackgroundColor="Black" VerticalOptions="FillAndExpand" HorizontalOptions="Fill">
|
||||
<StackLayout BackgroundColor="Black" Orientation="Horizontal" HorizontalOptions="Center" VerticalOptions="Center">
|
||||
<ContentView BackgroundColor="Black" Padding="0,40,0,40" VerticalOptions="FillAndExpand">
|
||||
<ContentView BackgroundColor="Black" Padding="20,20,20,20" VerticalOptions="FillAndExpand">
|
||||
<Image BackgroundColor="Black" Source="black_book.png" VerticalOptions="Center" HeightRequest="64" />
|
||||
</ContentView>
|
||||
</StackLayout>
|
||||
</StackLayout>
|
||||
<ScrollView Grid.Row="1">
|
||||
<StackLayout Grid.Column="1" Grid.Row="0" BackgroundColor="Black" VerticalOptions="FillAndExpand" HorizontalOptions="Fill">
|
||||
<StackLayout BackgroundColor="Black" Orientation="Vertical" HorizontalOptions="Center" VerticalOptions="Center">
|
||||
<Label Text="Aide de Jeu " FontSize="32" FontAttributes="Bold" TextColor="{StaticResource bgtan}" />
|
||||
<Label Text="{Binding Version, StringFormat='Version {0}'}" TextColor="{StaticResource bgtan}" />
|
||||
</StackLayout>
|
||||
</StackLayout>
|
||||
<ScrollView Grid.Row="1" Grid.ColumnSpan="2">
|
||||
<StackLayout Orientation="Vertical" Padding="16,40,16,40" Spacing="10">
|
||||
<Label Text="Aide de Jeu" FontSize="22" FontAttributes="Bold">
|
||||
<Label.GestureRecognizers>
|
||||
<TapGestureRecognizer Command="{Binding UpdateDataCommand}" />
|
||||
</Label.GestureRecognizers>
|
||||
</Label>
|
||||
<Label Text="{Binding Version}" FontAttributes="Bold" FontSize="22" />
|
||||
<Label Text="Cette application est une aide de jeu pour le plus célèbre des jeux de rôle" />
|
||||
<Label Text="Son contenu provient du site AideDD, et est traduit du SRD" />
|
||||
<Label Text="Les icones proviennent du site Game-icons.net" />
|
||||
<Label Text="Il est soumis à la licence OGL" />
|
||||
<Label>
|
||||
<Label.FormattedText>
|
||||
<FormattedString>
|
||||
<Span Text="Les icones proviennent du site " />
|
||||
<Span Text="Game-icons.net" FontAttributes="Bold" />
|
||||
</FormattedString>
|
||||
</Label.FormattedText>
|
||||
<Label.GestureRecognizers>
|
||||
<TapGestureRecognizer Command="{Binding OpenWebCommand}" CommandParameter="http://game-icons.net" />
|
||||
</Label.GestureRecognizers>
|
||||
</Label>
|
||||
|
||||
|
||||
<Button Margin="0,10,0,0" Text="Site web" Command="{Binding OpenWebCommand}" CommandParameter="https://nioux.github.io/AideDeJeu/" BackgroundColor="{StaticResource titlered}" TextColor="{StaticResource bgtan}" />
|
||||
|
||||
|
||||
<Button Margin="0,10,0,0" Text="Site web" Command="{Binding OpenWebCommand}" BackgroundColor="{StaticResource titlered}" TextColor="{StaticResource bgtan}" />
|
||||
</StackLayout>
|
||||
</ScrollView>
|
||||
</Grid>
|
||||
|
|
|
|||
|
|
@ -103,7 +103,8 @@
|
|||
HasUnevenRows="true"
|
||||
IsRefreshing="{Binding IsBusy, Mode=OneWay}"
|
||||
CachingStrategy="RecycleElement"
|
||||
SelectedItem="{Binding SelectedItem}">
|
||||
SelectedItem="{Binding SelectedItem}"
|
||||
ItemTapped="ItemsListView_ItemTapped">
|
||||
<!--RefreshCommand="{Binding LoadItemsCommand}"
|
||||
IsPullToRefreshEnabled="true"-->
|
||||
|
||||
|
|
|
|||
|
|
@ -28,5 +28,11 @@ namespace AideDeJeu.Views
|
|||
if (viewModel.Items.Count == 0)
|
||||
viewModel.LoadItemsCommand.Execute(null);
|
||||
}
|
||||
|
||||
private void ItemsListView_ItemTapped(object sender, ItemTappedEventArgs e)
|
||||
{
|
||||
if (e.Item == null) return;
|
||||
((ListView)sender).SelectedItem = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -44,6 +44,17 @@
|
|||
|
||||
<Label Text=" " />
|
||||
|
||||
<!--<ListView HasUnevenRows="True" RowHeight="-1" SeparatorVisibility="None" IsPullToRefreshEnabled="False" ItemsSource="{Binding DescriptionList}" ItemTapped="ListView_ItemTapped">
|
||||
<ListView.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<ViewCell>
|
||||
<ViewCell.View>
|
||||
<Label BindingContext="{Binding}" FormattedText="{Binding}" Style="{StaticResource Key=content}" />
|
||||
</ViewCell.View>
|
||||
</ViewCell>
|
||||
</DataTemplate>
|
||||
</ListView.ItemTemplate>
|
||||
</ListView>-->
|
||||
<Label FormattedText="{Binding Description}" Style="{StaticResource Key=content}" />
|
||||
|
||||
<Label Text="{Binding Item.Source}" Style="{StaticResource Key=content}" />
|
||||
|
|
|
|||
|
|
@ -33,5 +33,11 @@ namespace AideDeJeu.Views
|
|||
viewModel = new SpellDetailViewModel(item);
|
||||
BindingContext = viewModel;
|
||||
}
|
||||
|
||||
private void ListView_ItemTapped(object sender, ItemTappedEventArgs e)
|
||||
{
|
||||
if (e.Item == null) return;
|
||||
((ListView)sender).SelectedItem = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue