আপনি সরাসরি Xaml এ এটি করতে পারবেন না তবে আপনি এটি সংযুক্ত আচরণটি ব্যবহার করতে পারেন। (প্রস্থ ডিজাইনারের মধ্যে দৃশ্যমান হবে)
<ComboBox behaviors:ComboBoxWidthFromItemsBehavior.ComboBoxWidthFromItems="True">
<ComboBoxItem Content="Short"/>
<ComboBoxItem Content="Medium Long"/>
<ComboBoxItem Content="Min"/>
</ComboBox>
সংযুক্ত আচরণের কম্বোবক্সউইথথ্রমে আইটেমস প্রোপার্টি
public static class ComboBoxWidthFromItemsBehavior
{
public static readonly DependencyProperty ComboBoxWidthFromItemsProperty =
DependencyProperty.RegisterAttached
(
"ComboBoxWidthFromItems",
typeof(bool),
typeof(ComboBoxWidthFromItemsBehavior),
new UIPropertyMetadata(false, OnComboBoxWidthFromItemsPropertyChanged)
);
public static bool GetComboBoxWidthFromItems(DependencyObject obj)
{
return (bool)obj.GetValue(ComboBoxWidthFromItemsProperty);
}
public static void SetComboBoxWidthFromItems(DependencyObject obj, bool value)
{
obj.SetValue(ComboBoxWidthFromItemsProperty, value);
}
private static void OnComboBoxWidthFromItemsPropertyChanged(DependencyObject dpo,
DependencyPropertyChangedEventArgs e)
{
ComboBox comboBox = dpo as ComboBox;
if (comboBox != null)
{
if ((bool)e.NewValue == true)
{
comboBox.Loaded += OnComboBoxLoaded;
}
else
{
comboBox.Loaded -= OnComboBoxLoaded;
}
}
}
private static void OnComboBoxLoaded(object sender, RoutedEventArgs e)
{
ComboBox comboBox = sender as ComboBox;
Action action = () => { comboBox.SetWidthFromItems(); };
comboBox.Dispatcher.BeginInvoke(action, DispatcherPriority.ContextIdle);
}
}
এটি যা করে তা হ'ল এটি কম্বোবক্সের জন্য এক্সটেনশন পদ্ধতিকে কল করে সেটউইথথ্রোমআইটেমস যা (অদৃশ্যভাবে) নিজেই প্রসারিত হয় এবং ধসে পড়ে এবং তারপরে উত্পন্ন কম্বোবক্সআইটেমগুলির ভিত্তিতে প্রস্থের গণনা করে। (আইই এক্সপ্যান্ডক্ল্যাপসপ্রাইভাইডারের জন্য ইউআইএআউটোমেশনপ্রভাইডার.ডিলের একটি রেফারেন্স প্রয়োজন)
তারপরে এক্সটেনশন পদ্ধতি সেটউইথথ্রোমআইটেমগুলি
public static class ComboBoxExtensionMethods
{
public static void SetWidthFromItems(this ComboBox comboBox)
{
double comboBoxWidth = 19;
ComboBoxAutomationPeer peer = new ComboBoxAutomationPeer(comboBox);
IExpandCollapseProvider provider = (IExpandCollapseProvider)peer.GetPattern(PatternInterface.ExpandCollapse);
EventHandler eventHandler = null;
eventHandler = new EventHandler(delegate
{
if (comboBox.IsDropDownOpen &&
comboBox.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated)
{
double width = 0;
foreach (var item in comboBox.Items)
{
ComboBoxItem comboBoxItem = comboBox.ItemContainerGenerator.ContainerFromItem(item) as ComboBoxItem;
comboBoxItem.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
if (comboBoxItem.DesiredSize.Width > width)
{
width = comboBoxItem.DesiredSize.Width;
}
}
comboBox.Width = comboBoxWidth + width;
comboBox.ItemContainerGenerator.StatusChanged -= eventHandler;
comboBox.DropDownOpened -= eventHandler;
provider.Collapse();
}
});
comboBox.ItemContainerGenerator.StatusChanged += eventHandler;
comboBox.DropDownOpened += eventHandler;
provider.Expand();
}
}
এই এক্সটেনশন পদ্ধতিটি কল করার ক্ষমতাও সরবরাহ করে
comboBox.SetWidthFromItems();
পিছনে কোডে (উদাঃ কম্বোবক্স.লম্বড ইভেন্টে)