Hi Andrey,
The case is that
var element = page.FindChildByXPath("//div[text()='A 08012012 template']");
line of code contains a lot of actions executed in sequence.
First, it declares an 'element' variable. This, in short, allocates a space for the pointer in the stack and initializes this pointer with initial empty value;
Second, the call to page.FindChildByXPath() function is made. Depending on the result, the function returns either (pointer to the) object or some scalar value. On exit from the function, the runtime system allocates space in the heap and copies returned object or value to the created data structure;
Third, the system updates the value of the element variable in the stack so that it points to the created structure in the heap.
With the above in the mind, it is obvious that something like <object>.TryAgain() is possible only if the object provides such a method, i.e. only if it 'knows' how to re-evaluate itself.
It seems to me that .FindChildByXPath() is just a wrapper around the native function provided by web browser and is not designed to provide returned object with the method to re-evaluate itself.
In order to create reusable function, you may consider a loop that executes no more than certain number of attempts or seconds. Within the loop you need to execute the .FindChildByXPath() function and check the returned value. Exit from the loop if the function returned valid object (i.e. if object.Exists is true). Delay for some short period of time (e.g. 500ms) and execute the loop one more time if the function returned non-existing object or null.
Hope, the above will help.