Перейти к содержанию

Silverlight- приложение.


Рекомендуемые сообщения

Слова для поисковиков : TreeView, IsSynchronizedCurrentItem, DataSet, TreeView1SelectedItemChanged, LINQ to XML, XmlDataProvider ...

Эта статья не претендует на полноту.

Всем известно что WPF поддерживает XmlDataProvider, а вот SIlverlight нет. В MSDN рекомендуется пользоваться LINQ to XML. Что собственно я и сделал в этом примере.

Пример:

http://mastergh.gamehacklab.ru/

post-3-1313738935,81_thumb.png

post-3-1313738936,42_thumb.png

Код заммеля:


<UserControl x:Class="SearchClientRC.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
xmlns:local="clr-namespace:SearchClientRC"
mc:Ignorable="d"
d:DesignHeight="577" d:DesignWidth="945" x:Name="Control" Background="Black" BorderBrush="Black">

<UserControl.Resources>
<local:Cheats x:Key="CheatsDB"/>
<CollectionViewSource x:Name="CollectionViewCheat" Source="{Binding Source={StaticResource CheatsDB}}" />

<local:DocumentLuaViewModel x:Key="LuaDB"/>
<local:DocumentAAViewModel x:Key="AADB"/>
<sdk:HierarchicalDataTemplate x:Key="ItemTemplate" ItemsSource="{Binding}" >
<TextBlock Text="{Binding Title}" />
</sdk:HierarchicalDataTemplate>
</UserControl.Resources>
<Grid >
...
<Grid Grid.Row="2" HorizontalAlignment="Stretch" Margin="10,5,10,10" VerticalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="309" />
<ColumnDefinition Width="771*" />
</Grid.ColumnDefinitions>
<sdk:GridSplitter Grid.Column="1" HorizontalAlignment="Left" Margin="2,0,0,0" VerticalAlignment="Stretch" Width="10" >
<sdk:GridSplitter.Background>
<LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
<GradientStop Color="#FFDEDEDE" Offset="1" />
<GradientStop Color="#FFF2F2F2" Offset="0.288" />
<GradientStop Color="#FFDEDEDE" Offset="0" />
<GradientStop Color="#FFEBEBEB" Offset="0.714" />
</LinearGradientBrush>
</sdk:GridSplitter.Background>
</sdk:GridSplitter>
<RichTextBox Padding="10,10,0,0" IsReadOnly="True" Grid.Column="1" Margin="13,0,0,0" TextWrapping="Wrap" HorizontalScrollBarVisibility="Auto" HorizontalContentAlignment="Left" VerticalContentAlignment="Top" UseLayoutRounding="False">
<RichTextBox.Background >
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0" />
<GradientStop Color="Black" Offset="1" />
<GradientStop Color="Transparent" Offset="0.983" />
<GradientStop Color="#29FCFCFC" Offset="0.014" />
</LinearGradientBrush>
</RichTextBox.Background>
<Paragraph>
<Run Text="{Binding Path=SelectedItem.SubTitle, Mode=OneWay, ElementName=myTreeView2}"/>
</Paragraph>
</RichTextBox>
<sdk:TreeView Name="myTreeView2" ItemsSource="{Binding}" ItemTemplate="{StaticResource ItemTemplate}" DataContext="{Binding Source={StaticResource AADB}}" />
</Grid>
...
</Grid>
</UserControl>

Код C#:


public class TreeItemModel : List<TreeItemModel>
{
public string Title { get; set; }
public string SubTitle { get; set; }
public TreeItemModel(string title, string subTitle)
{
Title = title;
SubTitle = subTitle;
}
}
public class DocumentViewModel: List<TreeItemModel>
{
private string _localDataBaseName = "";

private static string GetName(XElement xelement)
{
var xAttribute = xelement.Attribute("name");
if (xAttribute == null)
throw new Exception("Не найден атрибут 'name'. Исправьте базу данных и перезапустите приложение.");
return xAttribute.Value;
}
private static string GetComment(XElement xelement)
{
return xelement.Elements("Comment").Count() > 0 ? xelement.Elements("Comment").First().Value : "";
}

// Текущий узел -> дочерние
private static void CreateInheritItem(XElement xelement, TreeItemModel treeParentItemModel)
{
var currentTreeItemViewModel = new TreeItemModel(GetName(xelement), GetComment(xelement));

foreach (var subXElement in xelement.Elements("P"))
CreateInheritItem(subXElement, currentTreeItemViewModel);

treeParentItemModel.Add(currentTreeItemViewModel);
}

public DocumentViewModel(string localDataBaseName)
{
_localDataBaseName = localDataBaseName;
var dbLua = XElement.Load(localDataBaseName);
foreach (var subXElement in dbLua.Elements("P"))
{
var currentTreeItemViewModel = new TreeItemModel(GetName(subXElement), GetComment(subXElement));
foreach (var xsubXElement in subXElement.Elements("P"))
CreateInheritItem(xsubXElement, currentTreeItemViewModel);
Add(currentTreeItemViewModel);
}
}
}

public class DocumentLuaViewModel : DocumentViewModel
{
public DocumentLuaViewModel() : base("LuaHelpRU.xml") { }
}

public class DocumentAAViewModel : DocumentViewModel
{
public DocumentAAViewModel() : base("AAHelpRU.xml") { }
}
    //---------------------------

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.