Непосредственно на полосе прокрутки:
<ScrollViewer HorizontalScrollBarVisibility="Hidden" />
Если вы делаете это в элементе управления, который реализует его в шаблоне ControlTemplate:
<StackPanel ScrollViewer.HorizontalScrollBarVisibility="Hidden" />
Если вы используете .NET 4.0, используйте кортеж:
lookup = new Dictionary<Tuple<TypeA, TypeB, TypeC>, string>();
Если нет, вы можете определить кортеж и использовать его в качестве ключа. Кортеж должен переопределить GetHashCode, Equals и IEquatable:
struct Tuple<T, U, W> : IEquatable<Tuple<T,U,W>>
{
readonly T first;
readonly U second;
readonly W third;
public Tuple(T first, U second, W third)
{
this.first = first;
this.second = second;
this.third = third;
}
public T First { get { return first; } }
public U Second { get { return second; } }
public W Third { get { return third; } }
public override int GetHashCode()
{
return first.GetHashCode() ^ second.GetHashCode() ^ third.GetHashCode();
}
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
{
return false;
}
return Equals((Tuple<T, U, W>)obj);
}
public bool Equals(Tuple<T, U, W> other)
{
return other.first.Equals(first) && other.second.Equals(second) && other.third.Equals(third);
}
}
Если по какой-то причине вы действительно хотите избежать создания собственного класса Tuple или использования встроенного в .NET 4.0 класса on, существует еще один возможный подход; вы можете объединить три ключевых значения вместе в одно значение.
Например, если три значения являются целыми типами вместе, не занимая более 64 бит, вы можете объединить их в ulong
.
В худшем случае вы всегда можете использовать строку, если убедитесь, что три компонента в ней разделены некоторым символом или последовательностью, которая не встречается внутри компонентов ключа, например, тремя числами, которые вы можете попробовать:
string.Format("{0}#{1}#{2}", key1, key2, key3)
Очевидно, что в этом подходе есть некоторые накладные расходы на композицию, но в зависимости от того, для чего вы его используете, это может быть достаточно тривиальным, чтобы не заботиться об этом.
I would override your Tuple with a proper GetHashCode, and just use it as the key.
As long as you overload the proper methods, you should see decent performance.