作成中のアドインでさまざまなカテゴリを管理するために XML ファイルを使用する必要があるという問題に遭遇しました。これは次の 2 つの部分で構成されています。
最初にすべてのカテゴリをロードし、メソッドを使用してそれらを Outlook に追加します。
AddCategory(文字列名、文字列の色、文字列のショートカット)
アプリケーション内からカテゴリを管理できる。
AddCategory がハードコーディングされている限り、かなりうまく機能するようになりました。XML の使用に移行して以来、あまり扱っていません。カテゴリ管理セクションを理解できれば、これでうまくいくと思いました。そのため、以下にコードの 3 つのセクションを掲載しました。HierarchicalDataTemplate を使用して XML を表示しようとする表示用の WPF (メールボックスのリストまでしか取得しません) と、XML ファイル自体です。管理インターフェイスから XML ファイルの一部を追加および削除できるようにするには、双方向バインディングを使用する必要があるように思えます。本質的に、このセットアップをコーディングする最善の方法が何であるかについて、私は途方に暮れています。さまざまなカテゴリがメールボックスに簡単に適用されるため、簡単にアクセスできる必要があります。どんな助けや指示も大歓迎です。私' ここで、HDT、XML、および WPF に関係する他のさまざまな質問をすべて調べましたが、それ以上は理解できませんでした。私の LINQfu は、バインドに関する私の知識と同様に弱いものです。
WPF コード
<Grid Name="mainGrid">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="30"/>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<Grid.Resources>
<XmlDataProvider x:Key="CategoriesData" Source="Categories.xml" XPath="MailBoxes"/>
<!--Template for Rule-->
<HierarchicalDataTemplate x:Key="ruleHDT"
ItemsSource="{Binding XPath=@Rules/Rule}">
<TextBlock Text="{Binding XPath=@Action}" />
</HierarchicalDataTemplate>
<!--Template for Category-->
<HierarchicalDataTemplate x:Key="categoryHDT"
ItemTemplate="{StaticResource ruleHDT}"
ItemsSource="{Binding XPath=@Categories/Category}">
<TextBlock Text="{Binding XPath=@Name}" />
</HierarchicalDataTemplate>
<!--Template for MailBox-->
<HierarchicalDataTemplate x:Key="mailboxHDT"
ItemTemplate="{StaticResource categoryHDT}"
ItemsSource="{Binding XPath=@MailBoxes/MailBox}">
<TextBlock Text="{Binding XPath=@Name}" />
</HierarchicalDataTemplate>
</Grid.Resources>
<TreeView Grid.Column="0" Grid.Row="0" Margin="5" ItemsSource="{Binding Source={StaticResource CategoriesData}, XPath=MailBox}"
ItemTemplate="{StaticResource mailboxHDT}"/>
<StackPanel Grid.Column="1" Grid.Row="0" HorizontalAlignment="Center" Height="100" Margin="5" VerticalAlignment="Top">
<Button Content="Add" Margin="5"/>
<Button Content="Remove" Margin="5" Width="80"/>
</StackPanel>
<StackPanel Grid.Column="0" Grid.Row="1" Margin="5" Orientation="Horizontal" VerticalAlignment="Center">
<RadioButton Content="All MailBoxes" GroupName="MailBoxXMLView" Margin="0,0,5,0" />
<RadioButton Content="Accessible MailBoxes" GroupName="MailBoxXMLView" Margin="5,0,0,0" IsChecked="True"/>
</StackPanel>
<StackPanel Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="2" Orientation="Horizontal" Margin="5" VerticalAlignment="Center">
<Button Content="Import" Margin="0,0,5,0" Width="80"/>
<Button Content="Export" Width="80"/>
</StackPanel>
</Grid>
XML ファイル
<?xml version="1.0" encoding="utf-8" ?>
<MailBoxes>
<MailBox Name="MB01">
<Categories>
<Category Name="Clean">
<Color>olCategoryColorGreen</Color>
<Shortcut>olCategoryShortcutKeyCtrlF3</Shortcut>
<Rules>
<Rule Action="Only">Clean</Rule>
</Rules>
</Category>
<Category Name="Spam">
<Color>olCategoryColorYellow</Color>
<Shortcut>olCategoryShortcutKeyCtrlF4</Shortcut>
<Rules>
<Rule Action="Remove">Clean</Rule>
</Rules>
</Category>
</Categories>
</MailBox>
<MailBox Name="MBTest01">
<Categories>
<Category Name="Cat01">
<Color>olCategoryColorRed</Color>
<Shortcut>olCategoryShortcutKeyNone</Shortcut>
<Rules>
</Rules>
</Category>
<Category Name="Cat02">
<Color>olCategoryColorYellow</Color>
<Shortcut>olCategoryShortcutKeyNone</Shortcut>
<Rules>
</Rules>
</Category>
</Categories>
</MailBox>
</MailBoxes>