◆ Show する前に消さない

[Window1.xaml]
<Window x:Class="wpf_sample.Window1"
        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:local="clr-namespace:wpf_sample"
        mc:Ignorable="d"
        Title="Window1"
        Height="320" Width="480">
    <Grid>
        <ComboBox x:Name="selectbox">
            <ComboBox.Items>
                <ComboBoxItem Tag="1">1-2</ComboBoxItem>
                <ComboBoxItem Tag="1">1-2</ComboBoxItem>
                <ComboBoxItem Tag="2">2-1</ComboBoxItem>
                <ComboBoxItem Tag="2">2-2</ComboBoxItem>
            </ComboBox.Items>
        </ComboBox>
    </Grid>
</Window>

[Windo1.xaml.cs]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;

namespace wpf_sample
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        public void initializeComboBox(string preserve_key)
        {
            var remove_items = this.selectbox.Items.Cast<ComboBoxItem>()
                .Where(e => (string)e.Tag != preserve_key).ToList();

            foreach (var i in remove_items)
            {
                this.selectbox.Items.Remove(i);
            }
        }
    }
}

こんな Window を作って こうやって開きます
var s = new Window1();
s.initializeComboBox("1");
s.Show();

使える選択肢だけ残しているのですが これだと

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=HorizontalContentAlignment; DataItem=null; target element is 'ComboBoxItem' (Name=''); target property is 'HorizontalContentAlignment' (type 'HorizontalAlignment')
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=VerticalContentAlignment; DataItem=null; target element is 'ComboBoxItem' (Name=''); target property is 'VerticalContentAlignment' (type 'VerticalAlignment')


とエラーがでます

HorizontalAlignment も VerticalAlignment も Binding はしていません

いろいろ試してると Show より先に 消すとダメみたいで 先に Show しているとエラーは出ませんでした

最初の Show のときにレイアウト計算のために HorizontalAlignment が必要だけど消されてしまってるのでエラーというところでしょうか

先に Show する単純な方法で解決できるのですが 使っていたものの作りでは先に initialize してから Show するようになっていたので 対応がめんどうです

別になくなったものがエラーになるだけで動きには問題ないので放置でもいいのですけど なんかエラーがあると気持ち悪いですからね