public void SetControlType(AccountType type) { CoinsViewModel model = new CoinsViewModel(_controlType = type).BindToMainModel(); model.InitTemplate(() => { if (model.PayBalance > 0) { int h = 40 * _drawnCoins.Count; StringBuilder template = new StringBuilder(); template.AppendFormat("<ToolTip xmlns ='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'><ToolTip.Style><Style TargetType=\"ToolTip\"><Setter Property=\"OverridesDefaultStyle\" Value=\"True\" /><Setter Property=\"Template\"><Setter.Value><ControlTemplate TargetType=\"ToolTip\"><Border BorderBrush=\"Black\" BorderThickness=\"1\"><Grid Height=\"{0}\" Width=\"140\" Background=\"AntiqueWhite\"><Canvas Margin=\"5,5,5,5\">", h); foreach (KeyValuePair <CoinType, int> coin in _drawnCoins) { template.AppendFormat("<Image x:Name=\"ibar{0}\" Stretch=\"None\" Width=\"100\" Height=\"30\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\">", (int)coin.Key); template.Append("<Image.Style><Style TargetType=\"{x:Type Image}\"></Style></Image.Style></Image>"); template.AppendFormat("<Label x:Name=\"lbl{0}\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Right\" FontWeight=\"Normal\" FontStyle=\"Italic\">x{1}</Label>", (int)coin.Key, coin.Value); } template.Append("</Canvas></Grid></Border></ControlTemplate></Setter.Value></Setter></Style></ToolTip.Style></ToolTip>"); ToolTip tooltip = (ToolTip)XamlReader.Parse(template.ToString()); tooltip.AddHandler(LoadedEvent, new RoutedEventHandler((object o, RoutedEventArgs e) => { int i = _drawnCoins.Count - 1; ToolTip tt = o as ToolTip; foreach (KeyValuePair <CoinType, int> coin in _drawnCoins) { Image img = tt.Template.FindName(string.Format("ibar{0}", (int)coin.Key), tt) as Image; Style simg = new Style(typeof(Image)); simg.Setters.Add(new Setter(Image.SourceProperty, ResourceLoadHelper.GetCoinsProgressBarLineImage(AccountType.Customer, (int)coin.Key, new Size(100, 30), coin.Value, 10, (Color)ColorConverter.ConvertFromString("Gold"), (Color)ColorConverter.ConvertFromString("Chocolate")).Source)); img.Style = simg; Label lbl = tt.Template.FindName(string.Format("lbl{0}", (int)coin.Key), tt) as Label; Canvas.SetTop(lbl, 10 + i * 40); Canvas.SetRight(lbl, 0); Canvas.SetTop(img, i-- *40); } _drawnCoins.Clear(); })); return(tooltip); } return(null); }); DataContext = model; switch (_controlType) { case AccountType.Customer: ChangeButton.Visibility = Visibility.Collapsed; Canvas.SetTop(ProgressBar1, 0); Canvas.SetTop(ProgressBar2, 40); Canvas.SetTop(ProgressBar5, 80); Canvas.SetTop(ProgressBar10, 120); break; case AccountType.VendingMachine: DropCoins.Visibility = Visibility.Collapsed; Canvas.SetLeft(ProgressBar1, 0); Canvas.SetLeft(ProgressBar2, 40); Canvas.SetLeft(ProgressBar5, 80); Canvas.SetLeft(ProgressBar10, 120); break; default: break; } ProgressBar1.SetControlType(type, CoinType.coin1); ProgressBar2.SetControlType(type, CoinType.coin2); ProgressBar5.SetControlType(type, CoinType.coin5); ProgressBar10.SetControlType(type, CoinType.coin10); Binding toolTip = new Binding("PutCoinBox.ToolTip"); toolTip.Source = model; toolTip.Mode = BindingMode.OneWay; ChangeButton.SetBinding(Button.ToolTipProperty, toolTip); if (_controlType == AccountType.Customer) { model.DisposeRequest += Dispose; } }